.org 0xF800 mov sp,#STACK call litedram_init mov bx,#load_i2c_txt call print ;########### SET ROM ADDRESS ############ mov al,#0x50 outb #0x61 mov ax,#0x0000 ; I2C ADDRESS outw #0x62 mov al,#0x02 ; Write 16bit outb #0x63 mov al,#0x00 outb #0x60 wait_send: inb #0x62 test al,#0x01 jnz wait_send mov bx,#OK_loading_txt call print ;############ READ CODE ################## mov bx,#0xEFFF mov di,#0x0000 rom_read_loop: mov al,#0x07 ; Read, 8bit, ignore ack outb #0x63 mov al,#0x00 outb #0x60 push bx cmp di,#0x1800 jz print_10 cmp di,#0x3000 jz print_20 cmp di,#0x4800 jz print_30 cmp di,#0x6000 jz print_40 cmp di,#0x7800 jz print_50 cmp di,#0x9000 jz print_60 cmp di,#0xA800 jz print_70 cmp di,#0xC000 jz print_80 cmp di,#0xD800 jz print_90 back: pop bx wait_send2: inb #0x62 test al,#0x01 jnz wait_send2 inw #0x60 ;MOV CL,AH ;MOV AH,AL ;MOV AL,CL STOSW dec bx jz rom_read_end dec bx jz rom_read_end jmp rom_read_loop rom_read_end: MOV AX,#0xC000 JMP AX print_10: mov cx,#ten_prc_txt call print_prc jmp back print_20: mov cx,#twenty_prc_txt call print_prc jmp back print_30: mov cx,#thirty_prc_txt call print_prc jmp back print_40: mov cx,#forty_prc_txt call print_prc jmp back print_50: mov cx,#fifty_prc_txt call print_prc jmp back print_60: mov cx,#sixty_prc_txt call print_prc jmp back print_70: mov cx,#seventy_prc_txt call print_prc jmp back print_80: mov cx,#eighty_prc_txt call print_prc jmp back print_90: mov cx,#ninty_prc_txt call print_prc jmp back print_prc: mov bx,#loading_rom_txt call print mov bx,cx call print ret ;######################################### include LiteDram_init.asm print: mov al,[bx] cmp al,#0 je print_exit out byte #0xA5 inc bx jmp print print_exit: ret .BLKB 18 ; Using the text as stack space for the compiled program STACK: ; brainfuck_mandelbrot depends on stack being at the end load_i2c_txt: .ASCII 'Read I2C EEPROM:\0' OK_loading_txt: .ASCII 'OK\nLoading rom 0%\r\0' loading_rom_txt: .ASCII 'Loading rom \0' ten_prc_txt: .ASCII '10%\r\0' twenty_prc_txt: .ASCII '20%\r\0' thirty_prc_txt: .ASCII '30%\r\0' forty_prc_txt: .ASCII '40%\r\0' fifty_prc_txt: .ASCII '50%\r\0' sixty_prc_txt: .ASCII '60%\r\0' seventy_prc_txt: .ASCII '70%\r\0' eighty_prc_txt: .ASCII '80%\r\0' ninty_prc_txt: .ASCII '90%\r\0' .ORG 0xFFF0 MOV AX,#0xF800 JMP AX .ORG 0xFFFF DB 0x00 ;Make sure a full 64KiB image