;********************************************************************* ; includes ;********************************************************************* .incdir "F:\git\goldmomo_endlos\assembler_files\ucore\" .include "include\ucore_ctrl.i" ;********************************************************************* ; sd header is placed here ;********************************************************************* .include "boot_level_sdHeader.s" ;********************************************************************* ;* start at address 32 here ;********************************************************************* start ;setup video (720x450) gpci r7,2 ;next 4 + X br setupVideo nop ;delay slot nop ;delay slot nop ;delay slot q nop ;delay slot ;clear screen movei r2,$00 ;destination movei r3,$00 moveih r2,$00 moveih r3,$f0 ;p(0,0) = f000 0000 gpci r7,2 ;next 4 + X br memset movei r1,$33 ; count delay slot movei r0,$00 ; value delay slot moveih r1,$9e ; count delay slot nop ; delay slot ;draw header gpci r7,2 ;next 4 + X br drawTextFormated movei r0,textHeader ;delay slot movei r1,10 ;delay slot moveih r0,>textHeader ;delay slot movei r2,0 ;delay slot ; nop ;write eeprom movei r2,0 ;adr movei r3,255 ;cnt wloop push r2 push r3 gpci r7,2 ;next 4 + X br i2cEEPROMWriteByte addqi r3,r2,7 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brts writeOk nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot push r2 ;push adr push r0 ;result gpci r7,2 ;next 4 + X br drawTextFormated movei r0,textWriteFail ;text delay slot movei r1,0 ;x delay slot moveih r0,>textWriteFail ; delay slot movei r2,1 ;y ;game over .stop writeOk rqpop rqpop nop pop r3 pop r2 subi r3,1 brts wloop addi r2,1 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;read back movei r2,0 ;adr movei r3,15 ;cnt loop push r2 push r3 nop gpci r7,2 ;next 4 + X br i2cEEPROMReadByte nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;print rsult push r0 gpci r7,2 ;next 4 + X br drawTextFormated movei r0,textResult ;text delay slot movei r1,0 ;x delay slot moveih r0,>textResult ; delay slot nop ;movei r2,1 ;y rqpop rqpop rqpop pop r0 pop r3 pop r2 nop addi r2,1 subi r3,1 brts loop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot end br end nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot textReaded .space 32 ;********************************************************************* ;* functions ;********************************************************************* ;****************************** ;* ;* i2cSend8WACK ;* ;* r1 = data ;* r6 = UcI2CSoftPortA/BCtrl ;* ;* return: ;* ;* r0 = 0 (OK) else other ;* i2cSend8WACK push r1 push r7 push r5 ;76543210 ; ; clk down movei r5,7 ;8 times i2cSend8WACKPushLoop ;DIR OUT, CLK 0, set data movei r0,$4 extri r1,7 addtqi r0,r0,0 ;set r0 bit 0 = 1 if bit 7 in r1 = 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$7 ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot ;DIR OUT, CLK = 1 hold data gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode addi r0,2 ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot subi r5,1 brts i2cSend8WACKPushLoop add r1,r1,r1 ;next bit delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;bits send so wait for ack ;DIR IN, CLK 0 movei r0,$0 ;DIR IN, CLK 0 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A delay slot nop ;delay slot st r6,r0 ;PUSH delay slot nop ;delay slot ;DIR IN, CLK 1 movei r0,$2 ;DIR IN, CLK 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot ;get result rqldi r6,0 nop movei r1,$8 ld r0 nop and r0,r0,r1 ;r0 = 0 OK, else fail gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;DIR OUT, CLK 0, DATA 0 movei r1,$4 ;DIR OUT, CLK 0, DATA 0 nop gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r1,$07 ;EN A ;delay slot nop ;delay slot st r6,r1 ;PUSH ;delay slot nop ;delay slot rqpop rqpop rqpop pop r5 pop r7 pop r1 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* i2cRecive8 ;* ;* r6 = UcI2CSoftPortA/BCtrl ;* ;* return: ;* ;* r0 = data ;* r1 = status (if ack used) ;* i2cRecive8 push r5 push r7 movei r0,0 ;76543210 ; ; clk down movei r5,7 ;8 times i2cRecive8PushLoop ;DIR IN, CLK 0 movei r1,$0 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r1,$7 ;delay slot nop ;delay slot st r6,r1 ;PUSH ;delay slot nop ;delay slot ;DIR IN, CLK 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode addi r1,2 ;CLK = 1 ;delay slot nop ;delay slot st r6,r1 ;PUSH ;delay slot nop ;delay slot ;read bit rqldi r6,0 nop movei r7,$1 ld r1 add r0,r0,r0 ;r0 * 2 lsri r1,3 subi r5,1 brts i2cRecive8PushLoop and r1,r1,r7 ;delay slot nop ;delay slot or r0,r0,r1 ;delay slot add r1,r1,r1 ;next bit ;delay slot ;bits readed so wait for ack nop ;DIR IN, CLK 0 movei r1,$0 ;DIR IN, CLK 0 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r1,$07 ;EN A delay slot nop ;delay slot st r6,r1 ;PUSH delay slot nop ;delay slot ;DIR IN, CLK 1 movei r1,$2 ;DIR IN, CLK 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r1,$07 ;EN A ;delay slot nop ;delay slot st r6,r1 ;PUSH ;delay slot nop ;delay slot ;get result rqldi r6,0 nop movei r5,$8 ld r1 nop and r1,r1,r5 ;r0 = 0 OK, else fail gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;DIR IN, CLK 0 movei r1,$0 ;DIR IN, CLK 0 nop gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r1,$07 ;EN A ;delay slot nop ;delay slot st r6,r1 ;PUSH ;delay slot nop ;delay slot rqpop rqpop nop pop r7 pop r5 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* i2cSendStart ;* ;* r6 = UcI2CSoftPortA/BCtrl ; i2cSendStart push r0 push r7 movei r0,$7 ;DIR OUT, CLK 1, DATA 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot movei r0,$6 ;DIR OUT, CLK 1, DATA 0 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot rqpop rqpop nop pop r7 pop r0 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;****************************** ;* ;* i2cSendStop ;* ;* r6 = UcI2CSoftPortA/BCtrl ; i2cSendStop push r0 push r7 movei r0,$6 ;DIR OUT, CLK 1, DATA 0 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot movei r0,$7 ;DIR OUT, CLK 1, DATA 1 gpci r7,2 ;next 4 + X br i2cWaitHalfPeriode moveih r0,$07 ;EN A ;delay slot nop ;delay slot st r6,r0 ;PUSH ;delay slot nop ;delay slot rqpop rqpop nop pop r7 pop r0 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;****************************** ;* ;* i2cEEPROMReadByte ;* ;* r2 = address ;* ;* return: ;* ;* r0 = data ;* i2cEEPROMReadByte push r1 push r6 push r7 i2cEEPROMReadByteStart ;start gpci r7,2 ;next 4 + X br i2cSendStart movei r6,UcI2CSoftPortACtrl ;delay slot nop ;delay slot moveih r6,>UcI2CSoftPortACtrl ;I2C ports ;delay slot nop ;delay slot ;write id gpci r7,2 ;next 4 + X br i2cSend8WACK movei r1,$A0 ;WRITE ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 ;if no ack retry because eeprom is busy brtc i2cEEPROMReadByteStart nop nop ;delay slot nop ;delay slot nop ;delay slot ;write address high gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r2,r2 ;delay slot nop ;delay slot lsri r1,8 ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFails movei r0,$ff ;delay slot nop ;delay slot moveih r0,$02 ;delay slot nop ;delay slot ;write address low gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r2,r2 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFails movei r0,$ff ;delay slot nop ;delay slot moveih r0,$03 ;delay slot nop ;delay slot ;start gpci r7,2 ;next 4 + X br i2cSendStart nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;write id gpci r7,2 ;next 4 + X br i2cSend8WACK movei r1,$A1 ;READ ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFails movei r0,$ff ;delay slot nop ;delay slot moveih r0,$04 ;delay slot nop ;delay slot ;capture data gpci r7,2 ;next 4 + X br i2cRecive8 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;stop i2cSend8WACKFails gpci r7,2 ;next 4 + X br i2cSendStop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot rqpop rqpop rqpop pop r7 pop r6 pop r1 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* i2cEEPROMWriteByte ;* ;* r3 = data ;* r2 = address ;* ;* return: ;* ;* r0 = result ;* i2cEEPROMWriteByte push r1 push r6 push r7 i2cEEPROMWriteByteStart ;start gpci r7,2 ;next 4 + X br i2cSendStart movei r6,UcI2CSoftPortACtrl ;delay slot nop ;delay slot moveih r6,>UcI2CSoftPortACtrl ;I2C ports ;delay slot nop ;delay slot ;write id gpci r7,2 ;next 4 + X br i2cSend8WACK movei r1,$A0 ;WRITE ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 ;if no ack retry because eeprom is busy brtc i2cEEPROMWriteByteStart nop nop ;delay slot nop ;delay slot nop ;delay slot ;write address high gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r2,r2 ;delay slot nop ;delay slot lsri r1,8 ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$02 ;delay slot nop ;delay slot ;write address low gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r2,r2 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$03 ;delay slot nop ;delay slot ;write data gpci r7,2 ;next 4 + X br i2cSend8WACK or r1,r3,r3 ;WRITE ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,0 brtc i2cSend8WACKFailsWr movei r0,$ff ;delay slot nop ;delay slot moveih r0,$04 ;delay slot nop ;delay slot movei r0,$0 ;all fine ;stop i2cSend8WACKFailsWr gpci r7,2 ;next 4 + X br i2cSendStop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot rqpop rqpop rqpop pop r7 pop r6 pop r1 jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* i2cWaitHalfPeriode ;* i2cWaitHalfPeriode push r0 ;min 134 cycles to waste movei r0,20 ;21 * 6 = 126 (+9 cycles) => 135 nop i2cWaitHalfPeriodeLoop subi r0,1 brts i2cWaitHalfPeriodeLoop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot rqpop jmpi r7,0 nop ;delay slot pop r0 ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* drawText ;* ;* r0 text ;* r1 cursor x ;* r2 cursor y drawTextFormated push r0 push r1 push r4 push r6 push r7 getsp r6,5 or r4,r0,r0 ;text address to r4 nop textLoop rqldi r4,0 nop nop ld r0 nop cmpeqi r0,0 brts textLoopEnd addi r4,1 ;next char delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,37 ;% brts textProcessCmd nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot gpci r7,2 ;next 4 + X br drawChar subi r0,32 ;map visible delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r1,1 textProcessCmdReturn br textLoop nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot textLoopEnd rqpop rqpop rqpop pop r7 pop r6 pop r4 rqpop rqpop jmpi r7,0 pop r1 ;delay slot pop r0 ;delay slot nop ;delay slot nop ;delay slot ;processing cmd string textProcessCmd rqldi r4,0 ;get next char nop nop ld r0 nop cmpeqi r0,37 ;% again so print it brts textProcessCmdProzent nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,99 ;c -> char brts textProcessCmdChar nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,120 ;x -> hex brts textProcessCmdHex nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot cmpeqi r0,117 ;u -> unsigned dec brts textProcessCmdUDec nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot br textProcessCmdReturn nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;%% textProcessCmdProzent gpci r7,2 ;next 4 + X br drawChar subi r0,32 ;map visible delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r1,1 br textProcessCmdReturn nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;%c textProcessCmdChar rqldi r6,0 addi r6,1 ;next value if exist nop ld r0 gpci r7,2 ;next 4 + X br drawChar subi r0,32 ;map visible delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r4,1 addi r1,1 br textProcessCmdReturn nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;%x textProcessCmdHex push r5 push r3 rqldi r6,0 addi r6,1 ;next value if exist nop ld r5 movei r3,3 ;3 hex digits textProcessCmdHexLoop or r0,r5,r5 nop lsri r0,12 nop cmploi r0,10 brts textProcessCmdHexNoABCDEF nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r0,7 textProcessCmdHexNoABCDEF gpci r7,2 ;next 4 + X br drawChar addi r0,16 ;map visible +48-32 delay slot nop ;delay slot nop ;delay slot nop ;delay slot subi r3,1 brts textProcessCmdHexLoop addi r1,1 ;x++ delay slot muli r5,16 ;r5 << 4 delay slot nop ;delay slot nop ;delay slot rqpop rqpop br textProcessCmdReturn pop r3 ;delay slot pop r5 ;delay slot addi r4,1 ;next input char delay slot nop ;delay slot ;%u textProcessCmdUDec push r5 push r4 push r3 push r7 rqldi r6,0 addi r6,1 ;next value if exist movei r4,$cd ld r5 moveih r4,$cc ;r4 = $cccd movei r7,4 ;5 dec digits textProcessCmdUDecDecodeDigit or r3,r5,r5 mul r5,r5,r4 ;result = value * $cccd nop gmulhi r5 ;result >> 16 nop lsrqi r5,r5,3 ;result >> 3 nop or r0,r5,r5 nop muli r0,10 subi r7,1 brts textProcessCmdUDecDecodeDigit nop ;delay slot sub r0,r3,r0 ;delay slot nop ;delay slot push r0 ;push digit ;delay slot ; movei r3,3 ;4 dec digits with leading zero test movei r4,0 ;leading zero textProcessCmdUDecPrintDigit rqpop nop nop pop r0 nop cmpeq r4,r0 brts textProcessCmdUDecSkipLeadingZero ;skip leading zero nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot movei r4,$ff ;illegal value after first not leading zero gpci r7,2 ;next 4 + X br drawChar addi r0,16 ;map visible +48-32 delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r1,1 textProcessCmdUDecSkipLeadingZero subi r3,1 brts textProcessCmdUDecPrintDigit nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;last digit rqpop nop nop pop r0 gpci r7,2 ;next 4 + X br drawChar addi r0,16 ;map visible +48-32 delay slot nop ;delay slot nop ;delay slot nop ;delay slot addi r1,1 rqpop nop nop pop r7 rqpop rqpop rqpop pop r3 pop r4 pop r5 br textProcessCmdReturn nop ;delay slot nop ;delay slot addi r4,1 ;next input char delay slot nop ;delay slot ;****************************** ;* ;* drawChar ;* ;* r0 value ;* r1 x ;* r2 y ;* ;* trash r0 drawChar push r1 push r2 push r3 push r4 push r5 push r6 ;destination base (sram base 0) muli r1,8 movei r4,$00 ;destination movei r5,$00 moveih r4,$00 moveih r5,$f0 ;p(0,0) = f000 0000 add r4,r4,r1 addtqi r5,r5,0 movei r1,$00 nop moveih r1,$2d ;720*16 nop mul r1,r1,r2;*y gmulhi r2 add r4,r4,r1 addt r5,r5,r2 ;font source movei r2,$68 ;source movei r3,$01 moveih r2,$50 moveih r3,$e0 ;p(0,0) = e001 5068 muli r0,8 ;value * 8 nop add r2,r2,r0 ;source addtqi r3,r3,0 ; ; movei r0,15 ;16 [y] dcYloop movei r1,7 ;8 [x] dcXloop esadr r3,r2 erqldi 0 eld r6 nop extri r6,15 brts dcNoTransp nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot movei r6,0 dcNoTransp esadr r5,r4 est r6,0 subi r1,1 ;x- brts dcXloop addi r4,1 ;delay slot addtqi r5,r5,0 ;delay slot addi r2,1 ;delay slot addtqi r3,r3,0 ;delay slot ; movei r1,$c8 nop moveih r1,$2 ;r1 = 720-8 nop add r4,r4,r1 ;dest + 720-8 addtqi r5,r5,0 ; movei r1,$e8 nop moveih r1,$2 ;r1 = 752-8 nop subi r0,1 ;y- brts dcYloop add r2,r2,r1 ;source + 752-8 delay slot addtqi r3,r3,0 ; delay slot nop ;delay slot nop ;delay slot ; rqpop rqpop rqpop pop r6 pop r5 pop r4 rqpop nop nop pop r3 rqpop rqpop jmpi r7,0 pop r2 ;delay slot pop r1 ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* r0 value ;* r1 count-1 (8 words)) ;* r3:r2 dest ; memset clearLoop esadr r3,r2 est r0,0 est r0,1 est r0,2 est r0,3 est r0,4 est r0,5 est r0,6 est r0,7 subi r1,1 brts clearLoop addi r2,8 ;delay slot addtqi r3,r3,0 ;delay slot nop ;delay slot nop ;delay slot jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;****************************** ;* ;* setupVideo ;* setupVideo movei r0,videoDefault ;source movei r1,UcTimer2Ctrl ;dest-1 moveih r0,>videoDefault moveih r1,>UcTimer2Ctrl movei r2,26 ;27-1 setupVideoLoop rqldi r0,0 addi r0,1 addi r1,1 ld r3 subi r2,1 brts setupVideoLoop st r1,r3 ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot jmpi r7,0 nop ;delay slot nop ;delay slot nop ;delay slot nop ;delay slot ;********************************************************************* ;* data ;********************************************************************* videoDefault ;AD NAME NEW DEFAULT word $0001 ;10 VIDEO_ON 1 1 (ON) word $0097 ;11 HSYNC (D = 11 .. 0) 152-1 152-1 word $017f ;12 HSTART (D = 11 .. 0) 384-1 384-1 word $017d ;13 HMEMSTART (D = 11 .. 0) 382-1 382-1 word $071f ;14 HSTOP (D = 11 .. 0) 1824-1 1824-1 word $076f ;15 HTOTAL (D = 11 .. 0) 1904-1 1904-1 word $0002 ;16 VSYNC (D = 10 .. 0) 3-1 3-1 word $001e ;17 VSTART (D = 10 .. 0) 31-1 31-1 word $03a2 ;18 VSTOP (D = 10 .. 0) 931-1 931-1 word $03a3 ;19 VTOTAL (D = 10 .. 0) 932-1 932-1 word $0000 ;1a LC ADDER LOW $0000 $0000 word $0080 ;1b LC ADDER HIGH $0080 $0040 word $0000 ;1c LC ADDER LATCH X X word $0000 ;1d LC START (10 .. 0) Pixeloffset $0000 $0000 word $0000 ;1e X X word $0000 ;1f X X word $0008 ;20 HLOADSTART 8 8 word $0170 ;21 HLOADSTOP 360+8 180+8 word $001e ;22 VLOADSTART 31-1 31-1 word $03a2 ;23 VLOADSTOP 931-1 931-1 word $0002 ;24 VLOADNEXT 2 4 word $0000 ;25 MEM_STARTADR_store low $0000 $0000 word $f000 ;26 MEM_STARTADR_store high $f000 $f000 word $0000 ;27 MEM_LINEOFFSET_store low $0000 $0000 word $0000 ;28 MEM_LINEOFFSET_store high $0000 $0000 word $0002 ;29 MEM_MODE_store 2 2 (X1R5G5B5X1R5G5B5) word $0000 ;2a LATCH MEM_STARTADR/LINEOFFSET/MODE X X textHeader .string "I2C EEPROM read/write test" word 0 textResult .string "Result = $%x" word 0 textWriteFail .string "WriteFail $%x at adr $%x" word 0