From ca0dcd8b11c944caabfe3fcce2fa50d57bf492c1 Mon Sep 17 00:00:00 2001 From: Andrew Alderwick Date: Sat, 27 Mar 2021 11:23:20 +0000 Subject: [PATCH] Added beginnings of neralie. --- projects/software/neralie.usm | 160 ++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 projects/software/neralie.usm diff --git a/projects/software/neralie.usm b/projects/software/neralie.usm new file mode 100644 index 0000000..ee1b99b --- /dev/null +++ b/projects/software/neralie.usm @@ -0,0 +1,160 @@ +( Prints Neralie time to console. + + Formatting isn't great, but it demonstrates that + the conversion works correctly. It's a little jittery + at the beginning because the FPS calculation isn't + accurate, so in the finished program delay showing + pulses for up to the first two seconds. + + When compiled to bin/boot.rom, the faketime package + allows easy testing of midnight roll-over: + + faketime '23:59:42' bin/emulator bin/boot.rom +) + +;fps { current 1 next 1 second 1 } +;number { started 1 count 1 } +;linee { var 2 } +;neralie { n6543 2 n21 1 } + +|0100 ;Console { pad 8 char 1 byte 1 short 2 } +|0110 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 } +|0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 } +|0190 ;Time { year 2 month 1 day 1 hour 1 minute 1 second 1 dow 1 doy 2 isdst 1 pad 4 get 1 } +|01F0 .RESET .FRAME .ERROR ( vectors ) +|01F8 [ 13fd 1ef3 1bf2 ] ( palette ) + +|0200 @RESET + #3c =fps.current + @ERROR BRK + +@FRAME + ,update-fps JSR2 + ,neralie-calc JSR2 + BRK + + ,font #00 ~number.count #08 MUL ADD2 =Sprite.addr + #02 =Sprite.color + #0000 #00 ~number.count DUP2 ,h JSR2 + ~number.count #01 ADD =number.count + +@neralie-calc + ( add up fractions of a pulse ) + #0120 #00 ~Time.hour MUL2 + #00c0 #00 ~Time.minute MUL2 ADD2 + #00f8 #00 ~Time.second MUL2 ADD2 + #0271 #00 ~fps.next MUL2 #00 ~fps.current DIV2 #0008 MUL2 ADD2 + #01b0 DIV2 + + ( add up units and tens of pulses ) + #0042 #00 ~Time.hour MUL2 ADD2 + #005e #00 ~Time.minute MUL2 ADD2 + #000b #00 ~Time.second MUL2 ADD2 + DUP2 #0064 DIV2 DUP2 STH2 #0064 MUL2 SUB2 =neralie.n21 POP + + ( add up hundreds of pulses + 10 x beats ) + STH2r + #01a0 #00 ~Time.hour MUL2 ADD2 + #0006 #00 ~Time.minute MUL2 ADD2 =neralie.n6543 + + ~neralie.n6543 ,print-short-decimal JSR2 + #20 =Console.char + ~neralie.n21 ,print-byte-decimal JSR2 + #0a =Console.char + JMP2r + +@h ( x1₂ x2₂ y₂ -- ) + =Screen.y + ,Screen.x =linee.var + ^line JMP + +@v ( y1₂ y2₂ x₂ -- ) + =Screen.x + ,Screen.y =linee.var + ( ^line JMP is redundant ) + +@line ( v1₂ v2₂ -- ) + OVR2 OVR2 LTH2 #01 JNZ SWP2 + STH2 + + $loop + DUP2 DUP2r STH2r GTH2 ^$end JNZ + DUP2 ~linee.var STR2 + #03 =Screen.color + #0001 ADD2 + ^$loop JMP + + $end + POP2 POP2r + JMP2r + +@update-fps + #00 =Time.get + ~fps.next #01 ADD =fps.next + ~Time.second ~fps.second NEQ JMP JMP2r + ~Time.second =fps.second + ~fps.next =fps.current + + ~fps.next ^print-byte-decimal JSR + ,strings-fps ^print-string JSR + + #00 =fps.next + JMP2r + +@print-byte-decimal ( byte₁ -- ) + #00 =number.started + DUP #64 DIV DUP ^$digit JSR #64 MUL SUB + DUP #0a DIV DUP ^$digit JSR #0a MUL SUB + ^$digit JSR + ~number.started ^$end JNZ + #30 =Console.char + $end JMP2r + + $digit + OVR ~number.started ORA #02 JNZ + POP JMP2r + #30 ADD =Console.char + #01 =number.started + JMP2r + +@print-string ( string₂ -- ) + DUP2 PEK2 DUP ^$not-end JNZ + + $end + POP POP2 JMP2r + + $not-end + =Console.char + #0001 ADD2 ^print-string JMP + +@print-short-decimal ( short₂ -- ) + #00 =number.started + DUP2 #2710 DIV2 DUP2 ^$digit JSR #2710 MUL2 SUB2 + DUP2 #03e8 DIV2 DUP2 ^$digit JSR #03e8 MUL2 SUB2 + DUP2 #0064 DIV2 DUP2 ^$digit JSR #0064 MUL2 SUB2 + DUP2 #000a DIV2 DUP2 ^$digit JSR #000a MUL2 SUB2 + ^$digit JSR + ~number.started ^$end JNZ + #30 =Console.char + $end JMP2r + + $digit + SWP POP + OVR ~number.started ORA #02 JNZ + POP JMP2r + #30 ADD =Console.char + #01 =number.started + JMP2r + +@strings + $fps [ 20 fps 0a 00 ] + +@font +[ + 003c 464a 5262 3c00 0018 0808 0808 1c00 + 003c 4202 3c40 7e00 003c 421c 0242 3c00 + 000c 1424 447e 0400 007e 407c 0242 3c00 + 003c 407c 4242 3c00 007e 0204 0810 1000 + 003c 423c 4242 3c00 003c 4242 3e02 3c00 +] +