I found the text font at 0x7900. It goes from character 32 (space) to 127. 126 and 127 are tiny flag symbols.
and we can write some lua to write some text to the screen:
7 bits of multiplier mem00=7f mem01=ff LDX $01=ff DEX STX $01=fe LDA $00=7f LSR A=3f STA $02=3f LDA #$00 a=00 BEFORE ADC $01=fe a=00 00000000 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=ff 11111111 c=0 BEFORE ROL: 0_11111111_00111111 ROL8 BEFORE= ff carry= 0 11111111 ROL8 AFTER = 7f carry= 1 01111111 ROL8 BEFORE= 3f carry= 1 00111111 ROL8 AFTER = 9f carry= 1 10011111 AFTER ROL: 1_01111111_10011111 1 7f 01111111 9f 10011111 BEFORE ADC $01=fe a=7f 01111111 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=7e 01111110 c=1 BEFORE ROL: 1_01111110_10011111 ROL8 BEFORE= 7e carry= 1 01111110 ROL8 AFTER = bf carry= 0 10111111 ROL8 BEFORE= 9f carry= 0 10011111 ROL8 AFTER = 4f carry= 1 01001111 AFTER ROL: 1_10111111_01001111 1 bf 10111111 4f 01001111 BEFORE ADC $01=fe a=bf 10111111 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=be 10111110 c=1 BEFORE ROL: 1_10111110_01001111 ROL8 BEFORE= be carry= 1 10111110 ROL8 AFTER = df carry= 0 11011111 ROL8 BEFORE= 4f carry= 0 01001111 ROL8 AFTER = 27 carry= 1 00100111 AFTER ROL: 1_11011111_00100111 1 df 11011111 27 00100111 BEFORE ADC $01=fe a=df 11011111 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=de 11011110 c=1 BEFORE ROL: 1_11011110_00100111 ROL8 BEFORE= de carry= 1 11011110 ROL8 AFTER = ef carry= 0 11101111 ROL8 BEFORE= 27 carry= 0 00100111 ROL8 AFTER = 13 carry= 1 00010011 AFTER ROL: 1_11101111_00010011 1 ef 11101111 13 00010011 BEFORE ADC $01=fe a=ef 11101111 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=ee 11101110 c=1 BEFORE ROL: 1_11101110_00010011 ROL8 BEFORE= ee carry= 1 11101110 ROL8 AFTER = f7 carry= 0 11110111 ROL8 BEFORE= 13 carry= 0 00010011 ROL8 AFTER = 09 carry= 1 00001001 AFTER ROL: 1_11110111_00001001 1 f7 11110111 09 00001001 BEFORE ADC $01=fe a=f7 11110111 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=f6 11110110 c=1 BEFORE ROL: 1_11110110_00001001 ROL8 BEFORE= f6 carry= 1 11110110 ROL8 AFTER = fb carry= 0 11111011 ROL8 BEFORE= 09 carry= 0 00001001 ROL8 AFTER = 04 carry= 1 00000100 AFTER ROL: 1_11111011_00000100 1 fb 11111011 04 00000100 BEFORE ADC $01=fe a=fb 11111011 ADD ADC (c=1+$01)=ff 11111111 AFTER ADC $01=fe a=fa 11111010 c=1 BEFORE ROL: 1_11111010_00000100 ROL8 BEFORE= fa carry= 1 11111010 ROL8 AFTER = fd carry= 0 11111101 ROL8 BEFORE= 04 carry= 0 00000100 ROL8 AFTER = 02 carry= 0 00000010 AFTER ROL: 0_11111101_00000010 0 fd 11111101 02 00000010 [MAME]> [MAME]> print(hex(0xff * 0x7f * 2)) fd02 [MAME]>
0D00: A6 00 ldx $00 0D02: D0 09 bne $0d0d 0D04: 86 22 stx $22 0D06: 86 23 stx $23 0D08: 86 24 stx $24 0D0A: 86 25 stx $25 0D0C: 60 rts 0D0D: A8 tay copy the angle into y 0D0E: 29 3F and #$3f 0D10: D0 03 bne $0d15 0D12: 4C B3 0D jmp $0db3 jmp to 0db3, one of our special cases 00,40,80,c0. 0D15: B9 00 0F lda $0f00, y get our lookup table value 0D18: CA dex decrement x (because when we do the adds, the carry bit will be set) 0D19: 86 01 stx $01 store x in $01 (multiplicand minus 1 goes in $01) 0D1B: 4A lsr a shift a right 0D1C: 85 02 sta $02 store a in $02 (will shift bits in and out of $02 with ror, when done $02=low byte of result) 0D1E: A9 00 lda #$00 0D20: 90 02 bcc $0d24 0D22: 65 01 adc $01 0D24: 6A ror a 0D25: 66 02 ror $02 0D27: 90 02 bcc $0d2b 0D29: 65 01 adc $01 0D2B: 6A ror a 0D2C: 66 02 ror $02 0D2E: 90 02 bcc $0d32 0D30: 65 01 adc $01 0D32: 6A ror a 0D33: 66 02 ror $02 0D35: 90 02 bcc $0d39 0D37: 65 01 adc $01 0D39: 6A ror a 0D3A: 66 02 ror $02 0D3C: 90 02 bcc $0d40 0D3E: 65 01 adc $01 0D40: 6A ror a 0D41: 66 02 ror $02 0D43: 90 02 bcc $0d47 0D45: 65 01 adc $01 0D47: 6A ror a 0D48: 66 02 ror $02 0D4A: 90 02 bcc $0d4e 0D4C: 65 01 adc $01 0D4E: 6A ror a 0D4F: 66 02 ror $02 0D51: A2 00 ldx #$00 0D53: 90 07 bcc $0d5c no sign bit, so let's branch to d5c 0D55: 49 FF eor #$ff sign bit is set, so negate our result A by EOR #$FF, and ADC #$00 (carry is set) 0D57: 69 00 adc #$00 0D59: F0 01 beq $0d5c need this branch here, because if A was 0, we don't want -0 to come back as FF00 (-256). 0D5B: CA dex decrement x so x will be #$FF 0D5C: 85 22 sta $22 0D5E: 86 23 stx $23 0D60: A6 00 ldx $00 0D62: 98 tya Multiply by SIN value, first get the angle from the Y register 0D63: 18 clc 0D64: 69 C0 adc #$c0 add #$c0 (add 192) since sin A is cos(A-0x40)=(A+0x100-0x40), addition wraps around 0-255 0D66: A8 tay put our new angle (+192) back into Y 0D67: B9 00 0F lda $0f00, y get the value from the cos table 0D6A: CA dex 0D6B: 86 01 stx $01 0D6D: 4A lsr a 0D6E: 85 02 sta $02 0D70: A9 00 lda #$00 0D72: 90 02 bcc $0d76 0D74: 65 01 adc $01 0D76: 6A ror a 0D77: 66 02 ror $02 0D79: 90 02 bcc $0d7d 0D7B: 65 01 adc $01 0D7D: 6A ror a 0D7E: 66 02 ror $02 0D80: 90 02 bcc $0d84 0D82: 65 01 adc $01 0D84: 6A ror a 0D85: 66 02 ror $02 0D87: 90 02 bcc $0d8b 0D89: 65 01 adc $01 0D8B: 6A ror a 0D8C: 66 02 ror $02 0D8E: 90 02 bcc $0d92 0D90: 65 01 adc $01 0D92: 6A ror a 0D93: 66 02 ror $02 0D95: 90 02 bcc $0d99 0D97: 65 01 adc $01 0D99: 6A ror a 0D9A: 66 02 ror $02 0D9C: 90 02 bcc $0da0 0D9E: 65 01 adc $01 0DA0: 6A ror a 0DA1: 66 02 ror $02 0DA3: A2 00 ldx #$00 0DA5: 90 07 bcc $0dae 0DA7: 49 FF eor #$ff 0DA9: 69 00 adc #$00 0DAB: F0 01 beq $0dae 0DAD: CA dex 0DAE: 85 24 sta $24 0DB0: 86 25 stx $25 0DB2: 60 rts 0DB3: 98 tya we copied the angle to the Y register before, so copy angle back to A 0DB4: D0 0D bne $0dc3 0DB6: A2 00 ldx #$00 angle = 0 or #$00, cos = 1, sin = 0 0DB8: 86 24 stx $24 0DBA: 86 25 stx $25 0DBC: A5 00 lda $00 0DBE: 85 22 sta $22 0DC0: 86 23 stx $23 0DC2: 60 rts 0DC3: 30 0D bmi $0dd2 0DC5: A2 00 ldx #$00 angle = 90 or #$40, cos = 0, sin = 1 0DC7: 86 22 stx $22 0DC9: 86 23 stx $23 0DCB: A5 00 lda $00 0DCD: 85 24 sta $24 0DCF: 86 25 stx $25 0DD1: 60 rts 0DD2: 29 40 and #$40 0DD4: D0 10 bne $0de6 0DD6: A2 00 ldx #$00 angle = 180 or #$80, cos = -1, sin = 0 0DD8: 86 24 stx $24 0DDA: 86 25 stx $25 0DDC: 38 sec 0DDD: 8A txa 0DDE: E5 00 sbc $00 0DE0: 85 22 sta $22 0DE2: CA dex 0DE3: 86 23 stx $23 0DE5: 60 rts 0DE6: A2 00 ldx #$00 angle = 270 or #$C0, cos = 0, sin = -1 0DE8: 86 22 stx $22 0DEA: 86 23 stx $23 0DEC: 38 sec 0DED: 8A txa 0DEE: E5 00 sbc $00 0DF0: 85 24 sta $24 0DF2: CA dex 0DF3: 86 25 stx $25 0DF5: 60 rts