include "include\ATJ2085_Ports.inc"
DEFC LCD_PORT=0xee ;MFP_GPOA_SELECT_REG
DEFC LCD_BIT=1
DEFC hlength = 0x800
DEFC clength = 0x34F
DEFC orgval = 0x0
DEFC filesize = 3072
org orgval
defw 0x50,0x4757,0x9719,0x3
defw hlength,0,clength,hlength
defw 0, 0, 0, 0, 0,0,hlength
endheader:
defs hlength-(endheader-orgval)
start:
di
ld a,0
out (WATCHDOG_REG),a ; disable watchdog
; ld a,INT_MROM_SRAM_ZRAM2
; out (INTERNAL_MROM_SRAM_PAGE_REG),a
ld a,0x1f ;MFP_SELECT_CS0S|GPOA2_ENABLE|GPOA2_OUTPUT_2|GPOA2_OUTPUT_1|GPOA2_OUTPUT_0
out (MFP_GPOA_SELECT_REG),a
ld a, EM_PAGE_HI_CE3_INV ; for output to the lcd
out (EM_PAGE_HI_REG),a
ld sp,lastl ; set stack
call set_dat
; in a,(GPIOB_DATA_REG) ; set background to white
; and 0xf8
; out (GPIOB_DATA_REG),a
ld a,MINT_ENABLE_RTC
out (MINT_ENABLE_REG),a
im 1
ld hl,misrstart
ld de,0x0038
ld bc,misrend-misrstart
ldir
; copy NMI ISR to 0x0066
ld hl,nmisrstart
ld de,0x0066
ld bc,nmisrend-nmisrstart
ldir
; ei
ld a,3
ld b,0
hang:
inc b
call printval
jr hang
misrstart:
ei
reti
misrend:
nmisrstart:
retn
nmisrend:
set_cmd:
in a,(LCD_PORT) ;0xee
or LCD_BIT
sub LCD_BIT
out (LCD_PORT),a
ret
set_dat:
in a,(LCD_PORT)
or LCD_BIT
out (LCD_PORT),a
ret
send_cmd: ; command in a
push af
call set_cmd
pop af
ld (0x8001),a
push af
call set_dat
pop af
ret
setsl: ; set screen page [c:0-3] and column [b:0-255]
push af
call set_cmd
ld a,0xB0
or c
ld (0x8001),a
ld a,b
and 0x0F ;the lowest 4 bits
ld (0x8001),a
ld a,b
srl a
srl a
srl a
srl a
or 0x10
ld (0x8001),a
call set_dat
pop af
ret
clearcol: ;column: b[0-255], modifies c
push af
xor a
ld c,0
call setsl
ld (0x8000),a
ld c,1
call setsl
ld (0x8000),a
ld c,2
call setsl
ld (0x8000),a
ld c,3
call setsl
ld (0x8000),a
pop af
ret
printval: ;print a value a[0..31] column: b[0-255]
push af
push bc
call clearcol
ld c,a
srl c
srl c
srl c
call setsl
and 7
ld b,a
inc b
ld a,0x80
loopie:
rlc a
djnz loopie
ld (0x8000),a
pop bc
pop af
ret
current:
defs filesize-(current-orgval)
lastl: