nop ;set video to 555 movei r0,2 ;1x5r5g5b movei r1,$29 movei r2,$2a moveih r1,$20 ;2025 - video mode moveih r2,$20 ;202a - latch out st r1,r0 st r2,r7 ;set 720*450 movei r2,2 ;vload next = 2 movei r1,$80 moveih r0,$0 ;lc_add = $00.80 0000 movei r3,$1a ;lc adder low movei r4,$1b ;lc adder high movei r5,$1c ;lc latch movei r6,$24 ;v load next moveih r3,$20 moveih r4,$20 moveih r5,$20 ;lc latch moveih r6,$20 ;lc latch st r3,r0 st r4,r1 st r5,r0 ;latch lc st r6,r2 movei r3,$21 movei r0,$70 moveih r3,$20 ;HLOAD STOP moveih r0,1 nop st r3,r0 ;HLOAD STOP = 360+8 (32 bit words) ; 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 clearLoop movei r1,$33 ; count delay slot movei r0,$00 ; value delay slot moveih r1,$9e ; count delay slot nop ; delay slot ; movei r5,0 ;y = e5 scanTest movei r2,$30 nop moveih r2,$20 ;read 2030 - ctrl ps data nop rqldi r2,0 nop nop ld r4 nop extri r4,8 brtc scanTest movei r0,0 ;delay slot nop ;delay slot moveih r0,$1 ;$100 = accept data delay slot nop ;delay slot st r2,r0 ;write 2030 - accept data movei r0,$00 nop moveih r0,$ff nop bic r4,r4,r0 nop push r4 ;%d test gpci r7,2 ;next 4 + X br drawText movei r0,t1 ;text delay slot movei r1,0 ;x delay slot moveih r0,>t1 ; delay slot or r2,r5,r5;y delay slot rqpop ;cleanup stack nop nop nop movei r0,$f addi r5,1 ; nop and r5,r5,r0;0..15 y br scanTest 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 t1 .string "scan code $%x" word 0 ;****************************** ;* ;* drawText ;* ;* r0 text ;* r1 x ;* r2 y drawText 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 push r7 ;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 r7,0 movei r0,15 ;16 [y] dcYloop esadr r3,r2 erqldi 0 erqldi 1 erqldi 2 erqldi 3 erqldi 4 erqldi 5 erqldi 6 erqldi 7 addi r2,8 addtqi r3,r3,0 movei r1,7 ;8 [x] dcXloop eld r6 nop extri r6,15 movets r6,r6,r7 ;t = 1 r6=r6 else r6=r7 (0) esadr r5,r4 est r6,0 subi r1,1 ;x- brts dcXloop addi r4,1 ;delay slot addtqi r5,r5,0 ;delay slot nop ;delay slot nop ;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 r7 pop r6 pop r5 rqpop rqpop nop pop r4 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