9086/boot_code/i2c_bootloader.asm

119 lines
1.6 KiB
NASM
Raw Normal View History

.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: inw #0x62
;test al,#0x01
;jnz wait_send
mov ax,#0x1FFE
aa:
dec ax
jnz aa
mov bx,#OK_loading_txt
call print
;############ READ 20% ##################
mov bx,#0xD000
mov di,#0x0000
rom_read_loop:
mov al,#0x05 ; Read, 8bit, ignore ack
outb #0x63
mov al,#0x00
outb #0x60
mov ax,#0x1FFE
aa2:
dec ax
jnz aa2
inw #0x60
STOSB
cmp di,#0x2999
jz print_20
cmp di,#0x5333
jz print_40
cmp di,#0x7CCC
jz print_60
cmp di,#0xA666
jz print_80
back:dec bx
jnz rom_read_loop
MOV AX,#0xC000
JMP AX
print_20:
mov bx,#twenty_prc_txt
call print
jmp back
print_40:
mov bx,#forty_prc_txt
call print
jmp back
print_60:
mov bx,#sixty_prc_txt
call print
jmp back
print_80:
mov bx,#eighty_prc_txt
call print
jmp back
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'
twenty_prc_txt: .ASCII 'Loading rom 20%\r\0'
forty_prc_txt: .ASCII 'Loading rom 40%\r\0'
sixty_prc_txt: .ASCII 'Loading rom 60%\r\0'
eighty_prc_txt: .ASCII 'Loading rom 80%\r\0'
.ORG 0xFFF0
MOV AX,#0xF800
JMP AX
.ORG 0xFFFF
DB 0x00 ;Make sure a full 64KiB image