Difference between revisions of "Disassembly:Democart 2"
From veswiki
| Line 6: | Line 6: | ||
; Annotated and formatted Democart 2 disassembly. | ; Annotated and formatted Democart 2 disassembly. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
processor f8 | processor f8 | ||
org $0800 | org $0800 | ||
| + | |||
| + | reset equ $0000 | ||
| + | delay equ $008F | ||
| + | clrscrn equ $00D0 | ||
| + | pushk equ $0107 | ||
| + | popk equ $011E | ||
| + | drawchar equ $0679 | ||
| + | drawchar_entry equ $067C | ||
| + | b_drawchar_bmp_entry equ $068A | ||
| + | b_score_left equ $02AC | ||
| + | b_score_right equ $02B5 | ||
| − | |||
| − | |||
| − | |||
| − | |||
cartridge_start: | cartridge_start: | ||
| − | + | .byte $55, $2B | |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Main Democart 2 script. Shows multiple demo screens, uses BIOS text and | ; Main Democart 2 script. Shows multiple demo screens, uses BIOS text and | ||
; graphics routines, then returns to BIOS reset. | ; graphics routines, then returns to BIOS reset. | ||
| Line 55: | Line 31: | ||
cartridge_entry: | cartridge_entry: | ||
lisu 3 ; 0802 63 | lisu 3 ; 0802 63 | ||
| − | lisl 7 ; 0803 | + | lisl 7 ; 0803 6F |
lis 1 ; 0804 71 | lis 1 ; 0804 71 | ||
| − | lr S,A ; 0805 | + | lr S,A ; 0805 5C - store A in selected scratchpad register |
pi $0135 ; 0806 28 01 35 | pi $0135 ; 0806 28 01 35 | ||
| − | dci L0BC6 ; 0809 | + | dci L0BC6 ; 0809 2A 0B C6 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 080C 28 0B A3 |
| − | lisu 3 ; | + | lisu 3 ; 080F 63 |
| − | lisl 7 ; 0810 | + | lisl 7 ; 0810 6F |
lis 3 ; 0811 73 | lis 3 ; 0811 73 | ||
| − | lr S,A ; 0812 | + | lr S,A ; 0812 5C - store A in selected scratchpad register |
pi $0135 ; 0813 28 01 35 | pi $0135 ; 0813 28 01 35 | ||
| − | dci L0BCF ; 0816 | + | dci L0BCF ; 0816 2A 0B CF - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0819 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 081C 76 |
| − | lr 3,A ; | + | lr 3,A ; 081D 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 081E 28 0F EA |
li $26 ; 0821 20 26 | li $26 ; 0821 20 26 | ||
lr 1,A ; 0823 51 | lr 1,A ; 0823 51 | ||
| Line 77: | Line 53: | ||
li $28 ; 0827 20 28 | li $28 ; 0827 20 28 | ||
lr 3,A ; 0829 53 | lr 3,A ; 0829 53 | ||
| − | pi | + | pi draw_entity_wrapper ; 082A 28 0B 76 |
| − | li $26 ; | + | li $26 ; 082D 20 26 |
| − | lr 1,A ; | + | lr 1,A ; 082F 51 |
li $21 ; 0830 20 21 | li $21 ; 0830 20 21 | ||
lr 2,A ; 0832 52 | lr 2,A ; 0832 52 | ||
li $28 ; 0833 20 28 | li $28 ; 0833 20 28 | ||
lr 3,A ; 0835 53 | lr 3,A ; 0835 53 | ||
| − | pi | + | pi draw_entity_wrapper ; 0836 28 0B 76 |
li $33 ; 0839 20 33 | li $33 ; 0839 20 33 | ||
| − | lr 1,A ; | + | lr 1,A ; 083B 51 |
| − | pi | + | pi draw_three_markers ; 083C 28 0B 7D |
| − | li $41 ; | + | li $41 ; 083F 20 41 |
lr 1,A ; 0841 51 | lr 1,A ; 0841 51 | ||
| − | pi | + | pi draw_three_markers ; 0842 28 0B 7D |
| − | dci L0BD8 ; 0845 | + | dci L0BD8 ; 0845 2A 0B D8 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0848 28 0B A3 |
| − | clr ; | + | clr ; 084B 70 |
| − | lr 3,A ; | + | lr 3,A ; 084C 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 084D 28 0F ED |
li $14 ; 0850 20 14 | li $14 ; 0850 20 14 | ||
lr 1,A ; 0852 51 | lr 1,A ; 0852 51 | ||
lis 6 ; 0853 76 | lis 6 ; 0853 76 | ||
lr 2,A ; 0854 52 | lr 2,A ; 0854 52 | ||
| − | pi | + | pi $020E ; 0855 28 02 0E |
li $14 ; 0858 20 14 | li $14 ; 0858 20 14 | ||
| − | lr 1,A ; | + | lr 1,A ; 085A 51 |
| − | li $2E ; | + | li $2E ; 085B 20 2E |
| − | lr 2,A ; | + | lr 2,A ; 085D 52 |
| − | pi | + | pi $020E ; 085E 28 02 0E |
li $12 ; 0861 20 12 | li $12 ; 0861 20 12 | ||
lr 1,A ; 0863 51 | lr 1,A ; 0863 51 | ||
| Line 112: | Line 88: | ||
lr 0,A ; 0867 50 | lr 0,A ; 0867 50 | ||
pi drawchar ; 0868 28 06 79 - BIOS draw character routine | pi drawchar ; 0868 28 06 79 - BIOS draw character routine | ||
| − | dci L0BE6 ; | + | dci L0BE6 ; 086B 2A 0B E6 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 086E 28 0B A3 |
lis 6 ; 0871 76 | lis 6 ; 0871 76 | ||
lr 3,A ; 0872 53 | lr 3,A ; 0872 53 | ||
| − | pi clear_screen_o37_0 ; 0873 28 | + | pi clear_screen_o37_0 ; 0873 28 0F EA |
lis 6 ; 0876 76 | lis 6 ; 0876 76 | ||
| − | lr | + | lr $A,A ; 0877 5A |
| − | dci L0C98 ; 0878 | + | dci L0C98 ; 0878 2A 0C 98 - load DC with data/code pointer |
| − | li $20 ; | + | li $20 ; 087B 20 20 |
| − | lr 1,A ; | + | lr 1,A ; 087D 51 |
| − | lr 2,A ; | + | lr 2,A ; 087E 52 |
L087F: | L087F: | ||
| − | li $80 ; | + | li $80 ; 087F 20 80 |
lr 0,A ; 0881 50 | lr 0,A ; 0881 50 | ||
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0882 28 0F CD |
lis 2 ; 0885 72 | lis 2 ; 0885 72 | ||
| − | as 1 ; 0886 | + | as 1 ; 0886 C1 |
lr 1,A ; 0887 51 | lr 1,A ; 0887 51 | ||
| − | ds | + | ds $A ; 0888 3A |
| − | + | bnz L087F ; 0889 94 F5 | |
| − | pi short_delay ; | + | pi short_delay ; 088B 28 0B 96 |
| − | lis 6 ; | + | lis 6 ; 088E 76 |
| − | lr 3,A ; | + | lr 3,A ; 088F 53 |
| − | pi clear_screen_o37_0 ; 0890 28 | + | pi clear_screen_o37_0 ; 0890 28 0F EA |
li $18 ; 0893 20 18 | li $18 ; 0893 20 18 | ||
lr 2,A ; 0895 52 | lr 2,A ; 0895 52 | ||
li $30 ; 0896 20 30 | li $30 ; 0896 20 30 | ||
lr 1,A ; 0898 51 | lr 1,A ; 0898 51 | ||
| − | dci L0CC8 ; 0899 | + | dci L0CC8 ; 0899 2A 0C C8 - load DC with data/code pointer |
| − | li $80 ; | + | li $80 ; 089C 20 80 |
| − | lr 0,A ; | + | lr 0,A ; 089E 50 |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 089F 28 0F CD |
| − | lis 2 ; | + | lis 2 ; 08A2 72 |
| − | as 1 ; | + | as 1 ; 08A3 C1 |
| − | lr 1,A ; | + | lr 1,A ; 08A4 51 |
| − | li $80 ; | + | li $80 ; 08A5 20 80 |
| − | lr 0,A ; | + | lr 0,A ; 08A7 50 |
| − | dci L0CC8 ; | + | dci L0CC8 ; 08A8 2A 0C C8 - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 08AB 28 0F CD |
| − | li $30 ; | + | li $30 ; 08AE 20 30 |
| − | lr 1,A ; | + | lr 1,A ; 08B0 51 |
| − | li $20 ; | + | li $20 ; 08B1 20 20 |
| − | lr 2,A ; | + | lr 2,A ; 08B3 52 |
| − | li $80 ; | + | li $80 ; 08B4 20 80 |
| − | lr 0,A ; | + | lr 0,A ; 08B6 50 |
| − | dci L0CC8 ; | + | dci L0CC8 ; 08B7 2A 0C C8 - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 08BA 28 0F CD |
| − | lis 2 ; | + | lis 2 ; 08BD 72 |
| − | as 1 ; | + | as 1 ; 08BE C1 |
| − | lr 1,A ; | + | lr 1,A ; 08BF 51 |
| − | li $80 ; | + | li $80 ; 08C0 20 80 |
| − | lr 0,A ; | + | lr 0,A ; 08C2 50 |
| − | dci L0CC8 ; | + | dci L0CC8 ; 08C3 2A 0C C8 - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 08C6 28 0F CD |
| − | dci L0CD0 ; | + | dci L0CD0 ; 08C9 2A 0C D0 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 08CC 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 08CF 76 |
| − | lr 3,A ; | + | lr 3,A ; 08D0 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 08D1 28 0F ED |
| − | li $13 ; | + | li $13 ; 08D4 20 13 |
| − | lr 1,A ; | + | lr 1,A ; 08D6 51 |
| − | lis 6 ; | + | lis 6 ; 08D7 76 |
| − | lr 2,A ; | + | lr 2,A ; 08D8 52 |
| − | pi | + | pi $020E ; 08D9 28 02 0E |
| − | li $13 ; | + | li $13 ; 08DC 20 13 |
| − | lr 1,A ; | + | lr 1,A ; 08DE 51 |
| − | li $2F ; | + | li $2F ; 08DF 20 2F |
| − | lr 2,A ; | + | lr 2,A ; 08E1 52 |
| − | pi | + | pi $020E ; 08E2 28 02 0E |
| − | li $11 ; | + | li $11 ; 08E5 20 11 |
| − | lr 1,A ; | + | lr 1,A ; 08E7 51 |
| − | lis 9 ; | + | lis 9 ; 08E8 79 |
| − | lr 2,A ; | + | lr 2,A ; 08E9 52 |
| − | li $24 ; | + | li $24 ; 08EA 20 24 |
| − | lr 3,A ; | + | lr 3,A ; 08EC 53 |
| − | pi bios_draw_a01fc_wrapper ; | + | pi bios_draw_a01fc_wrapper ; 08ED 28 0F C6 |
| − | li $5A ; | + | li $5A ; 08F0 20 5A |
| − | lr 1,A ; | + | lr 1,A ; 08F2 51 |
| − | lis 9 ; | + | lis 9 ; 08F3 79 |
| − | lr 2,A ; | + | lr 2,A ; 08F4 52 |
| − | li $24 ; | + | li $24 ; 08F5 20 24 |
| − | lr 3,A ; | + | lr 3,A ; 08F7 53 |
| − | pi bios_draw_a01fc_wrapper ; | + | pi bios_draw_a01fc_wrapper ; 08F8 28 0F C6 |
| − | lis 9 ; | + | lis 9 ; 08FB 79 |
| − | lr 4,A ; | + | lr 4,A ; 08FC 54 |
| − | dci L0C00 ; | + | dci L0C00 ; 08FD 2A 0C 00 - load DC with data/code pointer |
L0900: | L0900: | ||
lm ; 0900 16 - load byte from DC and increment DC | lm ; 0900 16 - load byte from DC and increment DC | ||
| Line 205: | Line 181: | ||
lm ; 0904 16 - load byte from DC and increment DC | lm ; 0904 16 - load byte from DC and increment DC | ||
lr 0,A ; 0905 50 | lr 0,A ; 0905 50 | ||
| − | xdc ; 0906 | + | xdc ; 0906 2C - exchange DC and H pointers |
| − | dci $0C1B ; 0907 | + | dci $0C1B ; 0907 2A 0C 1B - load DC with data/code pointer |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 090A 28 06 7C |
| − | xdc ; | + | xdc ; 090D 2C - exchange DC and H pointers |
| − | ds 4 ; | + | ds 4 ; 090E 34 |
| − | + | bnz L0900 ; 090F 94 F0 | |
| − | pi bios_score_prompt_wrapper ; 0911 28 | + | pi bios_score_prompt_wrapper ; 0911 28 0F D6 |
| − | dci L0BF9 ; 0914 | + | dci L0BF9 ; 0914 2A 0B F9 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0917 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 091A 76 |
| − | lr 3,A ; | + | lr 3,A ; 091B 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 091C 28 0F EA |
| − | clr ; | + | clr ; 091F 70 |
lr 2,A ; 0920 52 | lr 2,A ; 0920 52 | ||
lr 0,A ; 0921 50 | lr 0,A ; 0921 50 | ||
| − | lis $D ; 0922 | + | lis $D ; 0922 7D |
| − | lr | + | lr $A,A ; 0923 5A |
L0924: | L0924: | ||
| − | li $7E ; 0924 20 | + | li $7E ; 0924 20 7E |
lr 1,A ; 0926 51 | lr 1,A ; 0926 51 | ||
pi drawchar ; 0927 28 06 79 - BIOS draw character routine | pi drawchar ; 0927 28 06 79 - BIOS draw character routine | ||
| − | lr A,2 ; | + | lr A,2 ; 092A 42 |
| − | inc ; | + | inc ; 092B 1F |
| − | lr 2,A ; | + | lr 2,A ; 092C 52 |
| − | ds | + | ds $A ; 092D 3A |
| − | + | bnz L0924 ; 092E 94 F5 | |
L0930: | L0930: | ||
lis 4 ; 0930 74 | lis 4 ; 0930 74 | ||
| − | as 2 ; 0931 | + | as 2 ; 0931 C2 |
lr 2,A ; 0932 52 | lr 2,A ; 0932 52 | ||
lis 3 ; 0933 73 | lis 3 ; 0933 73 | ||
lr 1,A ; 0934 51 | lr 1,A ; 0934 51 | ||
L0935: | L0935: | ||
| − | li $C0 ; 0935 20 | + | li $C0 ; 0935 20 C0 |
lr 0,A ; 0937 50 | lr 0,A ; 0937 50 | ||
| − | dci $4000 ; 0938 | + | dci $4000 ; 0938 2A 40 00 - load DC with data/code pointer |
; Points data counter to unused area. | ; Points data counter to unused area. | ||
| − | ; | + | ; Hardware holds the proper value. |
| − | |||
| − | |||
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 093B 28 06 7C |
| − | ds 1 ; | + | ds 1 ; 093E 31 |
| − | lr A,1 ; | + | lr A,1 ; 093F 41 |
ci $77 ; 0940 25 77 | ci $77 ; 0940 25 77 | ||
| − | + | bc L0935 ; 0942 82 F2 | |
lr A,2 ; 0944 42 | lr A,2 ; 0944 42 | ||
ci $28 ; 0945 25 28 | ci $28 ; 0945 25 28 | ||
| − | + | bc L0930 ; 0947 82 E8 | |
lis 3 ; 0949 73 | lis 3 ; 0949 73 | ||
| − | lr | + | lr $A,A ; 094A 5A |
| − | li $26 ; | + | li $26 ; 094B 20 26 |
| − | lr 2,A ; | + | lr 2,A ; 094D 52 |
L094E: | L094E: | ||
| − | lis 8 ; | + | lis 8 ; 094E 78 |
| − | lr 1,A ; | + | lr 1,A ; 094F 51 |
clr ; 0950 70 | clr ; 0950 70 | ||
lr 0,A ; 0951 50 | lr 0,A ; 0951 50 | ||
| Line 266: | Line 240: | ||
pi drawchar ; 0952 28 06 79 - BIOS draw character routine | pi drawchar ; 0952 28 06 79 - BIOS draw character routine | ||
lis 2 ; 0955 72 | lis 2 ; 0955 72 | ||
| − | as 2 ; 0956 | + | as 2 ; 0956 C2 |
lr 2,A ; 0957 52 | lr 2,A ; 0957 52 | ||
ds 1 ; 0958 31 | ds 1 ; 0958 31 | ||
| − | ds | + | ds $A ; 0959 3A |
| − | + | bnz L0952 ; 095A 94 F7 | |
| − | pi drawchar ; | + | pi drawchar ; 095C 28 06 79 - BIOS draw character routine |
| − | lr A,2 ; | + | lr A,2 ; 095F 42 |
| − | inc ; 0960 | + | inc ; 0960 1F |
lr 2,A ; 0961 52 | lr 2,A ; 0961 52 | ||
ds 1 ; 0962 31 | ds 1 ; 0962 31 | ||
| Line 279: | Line 253: | ||
lr A,2 ; 0966 42 | lr A,2 ; 0966 42 | ||
ci $31 ; 0967 25 31 | ci $31 ; 0967 25 31 | ||
| − | + | bnc L0973 ; 0969 92 09 | |
| − | li $2B ; | + | li $2B ; 096B 20 2B |
| − | lr 2,A ; | + | lr 2,A ; 096D 52 |
| − | lis 3 ; | + | lis 3 ; 096E 73 |
| − | lr | + | lr $A,A ; 096F 5A |
| − | jmp L094E ; 0970 29 09 | + | jmp L094E ; 0970 29 09 4E - unconditional jump |
| − | |||
L0973: | L0973: | ||
| − | nop ; 0973 | + | nop ; 0973 2B |
clr ; 0974 70 | clr ; 0974 70 | ||
lr 0,A ; 0975 50 | lr 0,A ; 0975 50 | ||
| − | li $2D ; 0976 20 | + | li $2D ; 0976 20 2D |
lr 2,A ; 0978 52 | lr 2,A ; 0978 52 | ||
L0979: | L0979: | ||
li $53 ; 0979 20 53 | li $53 ; 0979 20 53 | ||
| − | lr 1,A ; | + | lr 1,A ; 097B 51 |
| − | pi drawchar ; | + | pi drawchar ; 097C 28 06 79 - BIOS draw character routine |
| − | ds 1 ; | + | ds 1 ; 097F 31 |
ds 2 ; 0980 32 | ds 2 ; 0980 32 | ||
pi drawchar ; 0981 28 06 79 - BIOS draw character routine | pi drawchar ; 0981 28 06 79 - BIOS draw character routine | ||
lis 3 ; 0984 73 | lis 3 ; 0984 73 | ||
| − | lr | + | lr $A,A ; 0985 5A |
L0986: | L0986: | ||
ds 2 ; 0986 32 | ds 2 ; 0986 32 | ||
| Line 307: | Line 280: | ||
ds 1 ; 0988 31 | ds 1 ; 0988 31 | ||
pi drawchar ; 0989 28 06 79 - BIOS draw character routine | pi drawchar ; 0989 28 06 79 - BIOS draw character routine | ||
| − | ds | + | ds $A ; 098C 3A |
| − | + | bnz L0986 ; 098D 94 F8 | |
| − | lr A,2 ; | + | lr A,2 ; 098F 42 |
ci $27 ; 0990 25 27 | ci $27 ; 0990 25 27 | ||
| − | + | bnc L099A ; 0992 92 07 | |
li $30 ; 0994 20 30 | li $30 ; 0994 20 30 | ||
lr 2,A ; 0996 52 | lr 2,A ; 0996 52 | ||
jmp L0979 ; 0997 29 09 79 - unconditional jump | jmp L0979 ; 0997 29 09 79 - unconditional jump | ||
| − | |||
L099A: | L099A: | ||
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 099A 28 0F D6 |
| − | dci L0C76 ; | + | dci L0C76 ; 099D 2A 0C 76 - load DC with data/code pointer |
| − | li $69 ; | + | li $69 ; 09A0 20 69 |
| − | lr | + | lr $A,A ; 09A2 5A |
| − | pi | + | pi draw_stream ; 09A3 28 0B A3 |
| − | pi | + | pi draw_stream ; 09A6 28 0B A3 |
| − | clr ; | + | clr ; 09A9 70 |
| − | lr | + | lr $A,A ; 09AA 5A |
| − | pi | + | pi draw_stream ; 09AB 28 0B A3 |
| − | lis 3 ; | + | lis 3 ; 09AE 73 |
| − | lr 3,A ; | + | lr 3,A ; 09AF 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 09B0 28 0F EA |
| − | dci L0C34 ; | + | dci L0C34 ; 09B3 2A 0C 34 - load DC with data/code pointer |
| − | xdc ; | + | xdc ; 09B6 2C - exchange DC and H pointers |
| − | dci L0C67 ; | + | dci L0C67 ; 09B7 2A 0C 67 - load DC with data/code pointer |
| − | lis 5 ; | + | lis 5 ; 09BA 75 |
| − | lr | + | lr $A,A ; 09BB 5A |
L09BC: | L09BC: | ||
| − | lm ; | + | lm ; 09BC 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 09BD 51 |
| − | lm ; | + | lm ; 09BE 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 09BF 52 |
| − | lm ; | + | lm ; 09C0 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 09C1 50 |
| − | xdc ; | + | xdc ; 09C2 2C - exchange DC and H pointers |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 09C3 28 0F CD |
| − | xdc ; | + | xdc ; 09C6 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 09C7 3A |
| − | + | bnz L09BC ; 09C8 94 F3 | |
| − | dci L0C5C ; | + | dci L0C5C ; 09CA 2A 0C 5C - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 09CD 28 0B A3 |
| − | lis 3 ; | + | lis 3 ; 09D0 73 |
| − | lr 3,A ; | + | lr 3,A ; 09D1 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 09D2 28 0F ED |
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 09D5 28 0F D6 |
| − | lis 9 ; | + | lis 9 ; 09D8 79 |
| − | lr | + | lr $A,A ; 09D9 5A |
| − | dci L0CDE ; | + | dci L0CDE ; 09DA 2A 0C DE - load DC with data/code pointer |
L09DD: | L09DD: | ||
| − | lm ; | + | lm ; 09DD 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 09DE 51 |
| − | lm ; | + | lm ; 09DF 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 09E0 52 |
| − | lm ; | + | lm ; 09E1 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 09E2 50 |
| − | xdc ; | + | xdc ; 09E3 2C - exchange DC and H pointers |
| − | dci $0CF9 ; | + | dci $0CF9 ; 09E4 2A 0C F9 - load DC with data/code pointer |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 09E7 28 06 7C |
| − | xdc ; | + | xdc ; 09EA 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 09EB 3A |
| − | + | bnz L09DD ; 09EC 94 F0 | |
| − | dci $0D08 ; | + | dci $0D08 ; 09EE 2A 0D 08 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 09F1 28 0B A3 |
| − | lis 3 ; | + | lis 3 ; 09F4 73 |
| − | lr 3,A ; | + | lr 3,A ; 09F5 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 09F6 28 0F ED |
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 09F9 28 0F D6 |
| − | li $10 ; | + | li $10 ; 09FC 20 10 |
| − | lr 1,A ; | + | lr 1,A ; 09FE 51 |
| − | li $1A ; | + | li $1A ; 09FF 20 1A |
| − | lr 2,A ; | + | lr 2,A ; 0A01 52 |
| − | li $10 ; | + | li $10 ; 0A02 20 10 |
| − | lr 3,A ; | + | lr 3,A ; 0A04 53 |
| − | pi | + | pi draw_entity_wrapper ; 0A05 28 0B 76 |
| − | lis 2 ; | + | lis 2 ; 0A08 72 |
| − | lr | + | lr $A,A ; 0A09 5A |
L0A0A: | L0A0A: | ||
| − | lis $F ; | + | lis $F ; 0A0A 7F |
| − | lr 3,A ; | + | lr 3,A ; 0A0B 53 |
| − | lis $F ; | + | lis $F ; 0A0C 7F |
| − | as 1 ; | + | as 1 ; 0A0D C1 |
| − | lr 1,A ; | + | lr 1,A ; 0A0E 51 |
| − | pi | + | pi draw_entity_wrapper ; 0A0F 28 0B 76 |
| − | ds | + | ds $A ; 0A12 3A |
| − | + | bnz L0A0A ; 0A13 94 F6 | |
| − | li $69 ; | + | li $69 ; 0A15 20 69 |
| − | lr | + | lr $A,A ; 0A17 5A |
| − | dci L0D14 ; | + | dci L0D14 ; 0A18 2A 0D 14 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0A1B 28 0B A3 |
| − | pi | + | pi draw_stream ; 0A1E 28 0B A3 |
| − | pi | + | pi draw_stream ; 0A21 28 0B A3 |
| − | li $30 ; | + | li $30 ; 0A24 20 30 |
| − | lr 1,A ; | + | lr 1,A ; 0A26 51 |
| − | li $28 ; | + | li $28 ; 0A27 20 28 |
| − | lr 2,A ; | + | lr 2,A ; 0A29 52 |
| − | li $10 ; | + | li $10 ; 0A2A 20 10 |
| − | lr 3,A ; | + | lr 3,A ; 0A2C 53 |
| − | pi | + | pi draw_entity_wrapper ; 0A2D 28 0B 76 |
| − | lis 6 ; | + | lis 6 ; 0A30 76 |
| − | lr | + | lr $A,A ; 0A31 5A |
| − | dci L0D44 ; | + | dci L0D44 ; 0A32 2A 0D 44 - load DC with data/code pointer |
L0A35: | L0A35: | ||
| − | lm ; | + | lm ; 0A35 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0A36 51 |
| − | lm ; | + | lm ; 0A37 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0A38 52 |
| − | lm ; | + | lm ; 0A39 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0A3A 50 |
| − | xdc ; | + | xdc ; 0A3B 2C - exchange DC and H pointers |
| − | pi drawchar ; | + | pi drawchar ; 0A3C 28 06 79 - BIOS draw character routine |
| − | xdc ; | + | xdc ; 0A3F 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0A40 3A |
| − | + | bnz L0A35 ; 0A41 94 F3 | |
| − | dci L0D56 ; | + | dci L0D56 ; 0A43 2A 0D 56 - load DC with data/code pointer |
| − | clr ; | + | clr ; 0A46 70 |
| − | lr | + | lr $A,A ; 0A47 5A |
| − | pi | + | pi draw_stream ; 0A48 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 0A4B 76 |
| − | lr 3,A ; | + | lr 3,A ; 0A4C 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 0A4D 28 0F ED |
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 0A50 28 0F D6 |
| − | dci L0D61 ; | + | dci L0D61 ; 0A53 2A 0D 61 - load DC with data/code pointer |
| − | li $69 ; | + | li $69 ; 0A56 20 69 |
| − | lr | + | lr $A,A ; 0A58 5A |
| − | pi | + | pi draw_stream ; 0A59 28 0B A3 |
| − | pi | + | pi draw_stream ; 0A5C 28 0B A3 |
| − | pi | + | pi draw_stream ; 0A5F 28 0B A3 |
| − | clr ; | + | clr ; 0A62 70 |
| − | lr | + | lr $A,A ; 0A63 5A |
| − | pi | + | pi draw_stream ; 0A64 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 0A67 76 |
| − | lr 3,A ; | + | lr 3,A ; 0A68 53 |
| − | pi clear_screen_o37_1 ; | + | pi clear_screen_o37_1 ; 0A69 28 0F ED |
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 0A6C 28 0F D6 |
| − | dci L0D79 ; | + | dci L0D79 ; 0A6F 2A 0D 79 - load DC with data/code pointer |
| − | lis 6 ; | + | lis 6 ; 0A72 76 |
| − | lr | + | lr $A,A ; 0A73 5A |
L0A74: | L0A74: | ||
| − | lm ; | + | lm ; 0A74 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0A75 51 |
| − | lm ; | + | lm ; 0A76 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0A77 52 |
| − | lm ; | + | lm ; 0A78 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0A79 50 |
| − | xdc ; | + | xdc ; 0A7A 2C - exchange DC and H pointers |
| − | dci L0D8B ; | + | dci L0D8B ; 0A7B 2A 0D 8B - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0A7E 28 0F CD |
| − | xdc ; | + | xdc ; 0A81 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0A82 3A |
| − | + | bnz L0A74 ; 0A83 94 F0 | |
| − | dci $0D99 ; | + | dci $0D99 ; 0A85 2A 0D 99 - load DC with data/code pointer |
| − | xdc ; | + | xdc ; 0A88 2C - exchange DC and H pointers |
| − | dci L0DA8 ; | + | dci L0DA8 ; 0A89 2A 0D A8 - load DC with data/code pointer |
| − | lis 3 ; | + | lis 3 ; 0A8C 73 |
| − | lr | + | lr $A,A ; 0A8D 5A |
L0A8E: | L0A8E: | ||
| − | lm ; | + | lm ; 0A8E 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0A8F 51 |
| − | lm ; | + | lm ; 0A90 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0A91 52 |
| − | lm ; | + | lm ; 0A92 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0A93 50 |
| − | xdc ; | + | xdc ; 0A94 2C - exchange DC and H pointers |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 0A95 28 06 7C |
| − | xdc ; | + | xdc ; 0A98 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0A99 3A |
| − | + | bnz L0A8E ; 0A9A 94 F3 | |
| − | dci L0D93 ; | + | dci L0D93 ; 0A9C 2A 0D 93 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0A9F 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 0AA2 76 |
| − | lr 3,A ; | + | lr 3,A ; 0AA3 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 0AA4 28 0F EA |
| − | dci L0DB1 ; | + | dci L0DB1 ; 0AA7 2A 0D B1 - load DC with data/code pointer |
| − | lis 2 ; | + | lis 2 ; 0AAA 72 |
| − | lr | + | lr $A,A ; 0AAB 5A |
L0AAC: | L0AAC: | ||
| − | lm ; | + | lm ; 0AAC 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0AAD 51 |
| − | lm ; | + | lm ; 0AAE 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0AAF 52 |
| − | lm ; | + | lm ; 0AB0 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0AB1 50 |
| − | xdc ; | + | xdc ; 0AB2 2C - exchange DC and H pointers |
| − | dci $0F58 ; | + | dci $0F58 ; 0AB3 2A 0F 58 - load DC with data/code pointer |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 0AB6 28 06 7C |
| − | xdc ; | + | xdc ; 0AB9 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0ABA 3A |
| − | + | bnz L0AAC ; 0ABB 94 F0 | |
| − | lis 4 ; | + | lis 4 ; 0ABD 74 |
| − | lr | + | lr $A,A ; 0ABE 5A |
| − | li $10 ; | + | li $10 ; 0ABF 20 10 |
| − | lr 2,A ; | + | lr 2,A ; 0AC1 52 |
L0AC2: | L0AC2: | ||
| − | li $17 ; | + | li $17 ; 0AC2 20 17 |
| − | lr 1,A ; | + | lr 1,A ; 0AC4 51 |
| − | li $81 ; | + | li $81 ; 0AC5 20 81 |
| − | lr 0,A ; | + | lr 0,A ; 0AC7 50 |
| − | pi drawchar ; | + | pi drawchar ; 0AC8 28 06 79 - BIOS draw character routine |
| − | lis 5 ; | + | lis 5 ; 0ACB 75 |
| − | as 2 ; | + | as 2 ; 0ACC C2 |
| − | lr 2,A ; | + | lr 2,A ; 0ACD 52 |
| − | ci $27 ; | + | ci $27 ; 0ACE 25 27 |
| − | + | bc L0AC2 ; 0AD0 82 F1 | |
| − | li $1A ; | + | li $1A ; 0AD2 20 1A |
| − | lr 1,A ; | + | lr 1,A ; 0AD4 51 |
| − | li $1A ; | + | li $1A ; 0AD5 20 1A |
| − | lr 2,A ; | + | lr 2,A ; 0AD7 52 |
| − | dci L0DC3 ; | + | dci L0DC3 ; 0AD8 2A 0D C3 - load DC with data/code pointer |
| − | lis 6 ; | + | lis 6 ; 0ADB 76 |
| − | lr | + | lr $A,A ; 0ADC 5A |
L0ADD: | L0ADD: | ||
| − | lm ; | + | lm ; 0ADD 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0ADE 50 |
| − | xdc ; | + | xdc ; 0ADF 2C - exchange DC and H pointers |
| − | dci L0DC9 ; | + | dci L0DC9 ; 0AE0 2A 0D C9 - load DC with data/code pointer |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 0AE3 28 06 7C |
| − | ds 1 ; | + | ds 1 ; 0AE6 31 |
| − | ds 1 ; | + | ds 1 ; 0AE7 31 |
| − | xdc ; | + | xdc ; 0AE8 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0AE9 3A |
| − | + | bnz L0ADD ; 0AEA 94 F2 | |
| − | li $2C ; | + | li $2C ; 0AEC 20 2C |
| − | lr 2,A ; | + | lr 2,A ; 0AEE 52 |
| − | li $12 ; | + | li $12 ; 0AEF 20 12 |
| − | lr 1,A ; | + | lr 1,A ; 0AF1 51 |
| − | li $80 ; | + | li $80 ; 0AF2 20 80 |
| − | lr 0,A ; | + | lr 0,A ; 0AF4 50 |
| − | dci L0DCE ; | + | dci L0DCE ; 0AF5 2A 0D CE - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0AF8 28 0F CD |
| − | li $43 ; | + | li $43 ; 0AFB 20 43 |
| − | lr 1,A ; | + | lr 1,A ; 0AFD 51 |
| − | li $40 ; | + | li $40 ; 0AFE 20 40 |
| − | lr 0,A ; | + | lr 0,A ; 0B00 50 |
| − | dci L0DCE ; | + | dci L0DCE ; 0B01 2A 0D CE - load DC with data/code pointer |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0B04 28 0F CD |
| − | pi bios_score_prompt_wrapper ; | + | pi bios_score_prompt_wrapper ; 0B07 28 0F D6 |
| − | dci L0DB7 ; | + | dci L0DB7 ; 0B0A 2A 0D B7 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0B0D 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 0B10 76 |
| − | lr 3,A ; | + | lr 3,A ; 0B11 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 0B12 28 0F EA |
| − | dci L0DD6 ; | + | dci L0DD6 ; 0B15 2A 0D D6 - load DC with data/code pointer |
| − | lis 8 ; | + | lis 8 ; 0B18 78 |
| − | lr 2,A ; | + | lr 2,A ; 0B19 52 |
L0B1A: | L0B1A: | ||
| − | lis $F ; | + | lis $F ; 0B1A 7F |
L0B1B: | L0B1B: | ||
| − | lr 1,A ; | + | lr 1,A ; 0B1B 51 |
| − | li $C0 ; | + | li $C0 ; 0B1C 20 C0 |
| − | lr 0,A ; | + | lr 0,A ; 0B1E 50 |
| − | lm ; | + | lm ; 0B1F 16 - load byte from DC and increment DC |
| − | xdc ; | + | xdc ; 0B20 2C - exchange DC and H pointers |
| − | lr | + | lr $A,A ; 0B21 5A |
| − | sr 4 ; | + | sr 4 ; 0B22 14 |
| − | sl 4 ; | + | sl 4 ; 0B23 15 |
| − | sr 1 ; | + | sr 1 ; 0B24 12 |
| − | lr | + | lr $B,A ; 0B25 5B |
| − | lr A, | + | lr A,$A ; 0B26 4A |
| − | sl 4 ; | + | sl 4 ; 0B27 15 |
| − | sr 1 ; | + | sr 1 ; 0B28 12 |
| − | lr | + | lr $A,A ; 0B29 5A |
| − | dci L0E26 ; | + | dci L0E26 ; 0B2A 2A 0E 26 - load DC with data/code pointer |
| − | lr A, | + | lr A,$B ; 0B2D 4B |
| − | adc ; | + | adc ; 0B2E 8E |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0B2F 28 0F CD |
| − | ds 1 ; | + | ds 1 ; 0B32 31 |
| − | dci L0E26 ; | + | dci L0E26 ; 0B33 2A 0E 26 - load DC with data/code pointer |
| − | lr A, | + | lr A,$A ; 0B36 4A |
| − | adc ; | + | adc ; 0B37 8E |
| − | li $C0 ; | + | li $C0 ; 0B38 20 C0 |
| − | lr 0,A ; | + | lr 0,A ; 0B3A 50 |
| − | pi | + | pi b_drawchar_bmp_wrapper ; 0B3B 28 0F CD |
| − | xdc ; | + | xdc ; 0B3E 2C - exchange DC and H pointers |
| − | ds 1 ; | + | ds 1 ; 0B3F 31 |
| − | lr A,1 ; | + | lr A,1 ; 0B40 41 |
| − | ci $5A ; | + | ci $5A ; 0B41 25 5A |
| − | + | bc L0B1B ; 0B43 82 D7 | |
| − | lis 4 ; | + | lis 4 ; 0B45 74 |
| − | as 2 ; | + | as 2 ; 0B46 C2 |
| − | lr 2,A ; | + | lr 2,A ; 0B47 52 |
| − | ci $2F ; | + | ci $2F ; 0B48 25 2F |
| − | + | bc L0B1A ; 0B4A 82 CF | |
| − | dci L0E96 ; | + | dci L0E96 ; 0B4C 2A 0E 96 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0B4F 28 0B A3 |
| − | lis 6 ; | + | lis 6 ; 0B52 76 |
| − | lr 3,A ; | + | lr 3,A ; 0B53 53 |
| − | pi clear_screen_o37_0 ; | + | pi clear_screen_o37_0 ; 0B54 28 0F EA |
L0B57: | L0B57: | ||
| − | dci L0E9D ; | + | dci L0E9D ; 0B57 2A 0E 9D - load DC with data/code pointer |
| − | lis $C ; | + | lis $C ; 0B5A 7C |
L0B5B: | L0B5B: | ||
| − | lr | + | lr $A,A ; 0B5B 5A |
L0B5C: | L0B5C: | ||
| − | lm ; | + | lm ; 0B5C 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0B5D 51 |
| − | lm ; | + | lm ; 0B5E 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0B5F 52 |
| − | lm ; | + | lm ; 0B60 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0B61 50 |
| − | xdc ; | + | xdc ; 0B62 2C - exchange DC and H pointers |
| − | dci L0EC1 ; | + | dci L0EC1 ; 0B63 2A 0E C1 - load DC with data/code pointer |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 0B66 28 06 7C |
| − | xdc ; | + | xdc ; 0B69 2C - exchange DC and H pointers |
| − | ds | + | ds $A ; 0B6A 3A |
| − | + | bnz L0B5C ; 0B6B 94 F0 | |
| − | dci L0EE4 ; | + | dci L0EE4 ; 0B6D 2A 0E E4 - load DC with data/code pointer |
| − | pi | + | pi draw_stream ; 0B70 28 0B A3 |
| − | jmp reset ; | + | jmp reset ; 0B73 29 00 00 - unconditional jump |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Wrapper around BIOS draw routine at $0215. Saves K, then tail-jumps into BIOS | ; Wrapper around BIOS draw routine at $0215. Saves K, then tail-jumps into BIOS | ||
; code. | ; code. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_entity_wrapper: | |
| − | lr K,P ; | + | lr K,P ; 0B76 08 |
| − | pi pushk ; | + | pi pushk ; 0B77 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | jmp | + | jmp $0215 ; 0B7A 29 02 15 - bios, calls draw char - unconditional jump |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Draws three repeated BIOS objects at fixed Y positions $0A, $17 and $24 using | ; Draws three repeated BIOS objects at fixed Y positions $0A, $17 and $24 using | ||
; BIOS routine $01F6. | ; BIOS routine $01F6. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_three_markers: | |
| − | lr K,P ; | + | lr K,P ; 0B7D 08 |
| − | pi pushk ; | + | pi pushk ; 0B7E 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | lis $A ; | + | lis $A ; 0B81 7A |
| − | lr 2,A ; | + | lr 2,A ; 0B82 52 |
| − | pi | + | pi $01F6 ; 0B83 28 01 F6 |
| − | li $17 ; | + | li $17 ; 0B86 20 17 |
| − | lr 2,A ; | + | lr 2,A ; 0B88 52 |
| − | pi | + | pi $01F6 ; 0B89 28 01 F6 |
| − | li $24 ; | + | li $24 ; 0B8C 20 24 |
| − | lr 2,A ; | + | lr 2,A ; 0B8E 52 |
| − | pi | + | pi $01F6 ; 0B8F 28 01 F6 |
| − | pi popk ; | + | pi popk ; 0B92 28 01 1E - restore return address from BIOS K-stack |
| − | pk ; | + | pk ; 0B95 0C - return via K/P after BIOS K-stack restore |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Short delay helper. Uses r0 as outer counter and r5 as BIOS delay parameter. | ; Short delay helper. Uses r0 as outer counter and r5 as BIOS delay parameter. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
short_delay: | short_delay: | ||
| − | lr K,P ; | + | lr K,P ; 0B96 08 |
| − | lis 3 ; | + | lis 3 ; 0B97 73 |
| − | lr 0,A ; | + | lr 0,A ; 0B98 50 |
| − | lis $F ; | + | lis $F ; 0B99 7F |
| − | lr 5,A ; | + | lr 5,A ; 0B9A 55 |
short_delay_loop: | short_delay_loop: | ||
| − | pi delay ; | + | pi delay ; 0B9B 28 00 8F |
| − | ds 0 ; | + | ds 0 ; 0B9E 30 |
| − | + | bnz short_delay_loop ; 0B9F 94 FB | |
| − | lr P,K ; | + | lr P,K ; 0BA1 09 |
| − | pop ; | + | pop ; 0BA2 1C - return from subroutine |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Draws a compressed or data-driven text/object stream. DC points at stream | ; Draws a compressed or data-driven text/object stream. DC points at stream | ||
; header: count, Y, X, then character/object bytes. | ; header: count, Y, X, then character/object bytes. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_stream: | |
| − | lr K,P ; | + | lr K,P ; 0BA3 08 |
| − | pi pushk ; | + | pi pushk ; 0BA4 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | lm ; | + | lm ; 0BA7 16 - load byte from DC and increment DC |
| − | lr 3,A ; | + | lr 3,A ; 0BA8 53 |
| − | lm ; | + | lm ; 0BA9 16 - load byte from DC and increment DC |
| − | lr 2,A ; | + | lr 2,A ; 0BAA 52 |
| − | lm ; | + | lm ; 0BAB 16 - load byte from DC and increment DC |
| − | lr 1,A ; | + | lr 1,A ; 0BAC 51 |
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Inner stream loop. Loads one stream item from DC and draws through BIOS | ; Inner stream loop. Loads one stream item from DC and draws through BIOS | ||
; drawchar entry with alternate glyph/data pointer. | ; drawchar entry with alternate glyph/data pointer. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_stream_next: | |
| − | lm ; | + | lm ; 0BAD 16 - load byte from DC and increment DC |
| − | lr 0,A ; | + | lr 0,A ; 0BAE 50 |
| − | xdc ; | + | xdc ; 0BAF 2C - exchange DC and H pointers |
| − | dci L0EEF ; | + | dci L0EEF ; 0BB0 2A 0E EF - load DC with data/code pointer |
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Calls BIOS drawchar entry for one stream item, advances, and repeats until | ; Calls BIOS drawchar entry for one stream item, advances, and repeats until | ||
; count expires. | ; count expires. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_stream_call: | |
| − | pi drawchar_entry ; | + | pi drawchar_entry ; 0BB3 28 06 7C |
| − | xdc ; | + | xdc ; 0BB6 2C - exchange DC and H pointers |
| − | ds 3 ; | + | ds 3 ; 0BB7 33 |
| − | + | bnz draw_stream_next ; 0BB8 94 F4 | |
| − | lr A, | + | lr A,$A ; 0BBA 4A |
| − | ci $69 ; | + | ci $69 ; 0BBB 25 69 |
| − | + | bz draw_stream_done ; 0BBD 84 04 | |
| − | pi short_delay ; | + | pi short_delay ; 0BBF 28 0B 96 |
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | |||
; Restores return address from BIOS K-stack and returns from stream drawing | ; Restores return address from BIOS K-stack and returns from stream drawing | ||
; routine. | ; routine. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | draw_stream_done: | |
| − | pi popk ; | + | pi popk ; 0BC2 28 01 1E - restore return address from BIOS K-stack |
| − | pk ; | + | pk ; 0BC5 0C - return via K/P after BIOS K-stack restore |
| − | |||
L0BC6: | L0BC6: | ||
| − | lr QU,A ; | + | lr QU,A ; 0BC6 06 |
| − | sl 1 ; | + | sl 1 ; 0BC7 13 |
| − | out $91 ; | + | out $91 ; 0BC8 27 91 |
| − | bf 9,L0B57 ; | + | bf 9,L0B57 ; 0BCA 99 8C |
| − | + | bnz L0B5B ; 0BCC 94 8E | |
| − | + | db $A3 ; 0BCE A3 | |
L0BCF: | L0BCF: | ||
| − | lr QU,A ; | + | lr QU,A ; 0BCF 06 |
| − | oi $26 ; | + | oi $26 ; 0BD0 22 26 |
| − | lr D,A ; | + | lr D,A ; 0BD2 5E - store A and decrement ISAR |
| − | lr A,D ; | + | lr A,D ; 0BD3 4E - read selected scratchpad register and decrement ISAR |
| − | lr 8,A ; | + | lr 8,A ; 0BD4 58 |
| − | lr 8,A ; | + | lr 8,A ; 0BD5 58 |
| − | lr 2,A ; | + | lr 2,A ; 0BD6 52 |
| − | lr I,A ; | + | lr I,A ; 0BD7 5D - store A and increment ISAR |
L0BD8: | L0BD8: | ||
| − | lr IS,A ; | + | lr IS,A ; 0BD8 0B |
| − | ds 1 ; | + | ds 1 ; 0BD9 31 |
| − | di ; | + | di ; 0BDA 1A |
| − | bf $E,L0B6E ; | + | bf $E, L0B6E ; 0BDB 9E 92 |
| − | xm ; | + | xm ; 0BDD 8C |
| − | lr A,KU ; | + | lr A,KU ; 0BDE 00 |
| − | lr D,A ; | + | lr D,A ; 0BDF 5E - store A and decrement ISAR |
| − | lr A, | + | lr A,$A ; 0BE0 4A |
| − | lr A,S ; | + | lr A,S ; 0BE1 4C - read selected scratchpad register |
| − | lr A,KU ; | + | lr A,KU ; 0BE2 00 |
| − | asd D ; | + | asd D ; 0BE3 DE |
| − | asd | + | asd 9 ; 0BE4 D9 |
| − | as D ; | + | as D ; 0BE5 CE |
L0BE6: | L0BE6: | ||
| − | lr DC,H ; | + | lr DC,H ; 0BE6 10 |
| − | li $0A ; | + | li $0A ; 0BE7 20 0A |
| − | bf $D,L0B7B ; | + | bf $D, L0B7B ; 0BE9 9D 91 |
| − | bf 9,L0B85 | + | bf 9, L0B85 ; 0BEB 99 99 |
| − | bf $E,L0B80 ; | + | bf $E, L0B80 ; 0BED 9E 92 |
| − | + | bno L0B80 ; 0BEF 98 90 | |
| − | lr A,KU ; | + | lr A,KU ; 0BF1 00 |
| − | + | br draw_three_markers ; 0BF2 90 8A - unconditional jump | |
| + | |||
| + | ; ----------------------------------------------------------------------------- | ||
| + | ; data_tables | ||
| + | ; Smart disassembly marks $0BF4-$0FC5 as data. | ||
| + | ; ----------------------------------------------------------------------------- | ||
| + | |||
L0BF4: | L0BF4: | ||
| − | + | .byte $96, $96, $8E, $9C, $A3 ; 0BF4 | |
| − | |||
| − | |||
| − | |||
L0BF9: | L0BF9: | ||
| − | + | .byte $04, $2B, $2D, $5E, $4A, $58, $54 ; 0BF9 | |
| − | |||
| − | |||
| − | .byte $2D | ||
| − | |||
| − | |||
| − | |||
| − | |||
L0C00: | L0C00: | ||
| − | + | .byte $2A, $10, $C0, $42, $10, $C0, $36, $1B ; 0C00 | |
| − | + | .byte $C0, $2A, $25, $C0, $42, $25, $C0, $19 ; 0C08 | |
| − | + | .byte $0D, $83, $52, $28, $84, $17, $0B, $C1 ; 0C10 | |
| − | + | .byte $54, $2A, $42 ; 0C18 | |
| − | + | L0C1B: | |
| − | + | .byte $00, $20, $70, $20, $00, $20, $70, $E0 ; 0C1B | |
| − | + | .byte $50, $08, $80, $50, $38, $70, $20, $08 ; 0C23 | |
| − | + | .byte $08, $08, $08, $F8, $F8, $80, $80, $80 ; 0C2B | |
| − | + | .byte $80 ; 0C33 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0C34: | L0C34: | ||
| − | + | .byte $0E, $FF, $FF, $3F, $2A, $2E, $2A, $2E ; 0C34 | |
| − | .byte $FF | + | .byte $70, $FF, $FF, $FC, $54, $74, $54, $74 ; 0C3C |
| − | + | .byte $5D, $55, $5D, $55, $5D, $55, $5D, $55 ; 0C44 | |
| − | + | .byte $00, $40, $60, $7D, $7F, $7D, $00, $00 ; 0C4C | |
| − | + | .byte $00, $02, $06, $BE, $FE, $BE, $00, $00 ; 0C54 | |
| − | .byte $ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0C5C: | L0C5C: | ||
| − | + | .byte $08, $13, $1F, $9D, $9A, $92, $9E, $8F ; 0C5C | |
| − | + | .byte $92, $9C, $8E ; 0C64 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0C67: | L0C67: | ||
| − | + | .byte $30, $2E, $C0, $33, $2E, $C0, $31, $33 ; 0C67 | |
| − | .byte $2E | + | .byte $C0, $0B, $32, $80, $5C, $32, $40 ; 0C6F |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0C76: | L0C76: | ||
| − | + | .byte $0C, $0B, $17, $40, $45, $40, $40, $00 ; 0C76 | |
| − | + | .byte $00, $00, $00, $40, $45, $40, $40, $04 ; 0C7E | |
| − | + | .byte $33, $2E, $4B, $4E, $5E, $66, $09, $1C ; 0C86 | |
| − | + | .byte $20, $4B, $56, $4A, $4C, $54, $53, $4A ; 0C8E | |
| − | + | .byte $4C, $54 ; 0C96 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | .byte $2E | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0C98: | L0C98: | ||
| − | + | .byte $F8, $84, $82, $81, $81, $81, $81, $FF ; 0C98 | |
| − | + | .byte $00, $00, $00, $1C, $23, $22, $22, $DC ; 0CA0 | |
| − | + | .byte $00, $00, $00, $78, $C7, $44, $44, $38 ; 0CA8 | |
| − | + | .byte $04, $04, $04, $04, $FC, $44, $44, $7F ; 0CB0 | |
| − | .byte $ | + | .byte $10, $28, $28, $28, $28, $28, $10, $EF ; 0CB8 |
| − | + | .byte $00, $00, $00, $08, $14, $14, $08, $F6 ; 0CC0 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | .byte $ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0CC8: | L0CC8: | ||
| − | .byte $FF | + | .byte $FF, $C3, $A5, $99, $99, $A5, $C3, $FF ; 0CC8 |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0CD0: | L0CD0: | ||
| − | + | .byte $0B, $30, $19, $8A, $DF, $5E, $99, $00 ; 0CD0 | |
| − | + | .byte $4D, $59, $D9, $CD, $56, $8E ; 0CD8 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0CDE: | L0CDE: | ||
| − | + | .byte $1B, $10, $82, $50, $27, $82, $25, $0D ; 0CDE | |
| − | + | .byte $C1, $3D, $10, $C1, $36, $1B, $C1, $2F ; 0CE6 | |
| − | + | .byte $25, $C1, $47, $28, $C1, $17, $0B, $C0 ; 0CEE | |
| − | + | .byte $54, $2A, $40 ; 0CF6 | |
| − | + | L0CF9: | |
| − | + | .byte $00, $20, $F8, $70, $00, $00, $50, $20 ; 0CF9 | |
| − | + | .byte $50, $00, $20, $70, $D8, $70, $20 ; 0D01 | |
| − | + | L0D08: | |
| − | + | .byte $09, $16, $1D, $5D, $5A, $4A, $4C, $4E ; 0D08 | |
| − | + | .byte $00, $61, $4A, $5C ; 0D10 | |
| − | |||
| − | |||
| − | |||
| − | .byte $ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D14: | L0D14: | ||
| − | + | .byte $0D, $10, $13, $00, $42, $43, $00, $00 ; 0D14 | |
| − | + | .byte $00, $47, $42, $00, $00, $00, $41, $43 ; 0D1C | |
| − | + | .byte $0D, $16, $13, $E9, $44, $42, $00, $00 ; 0D24 | |
| − | + | .byte $EA, $41, $43, $00, $00, $E2, $00, $43 ; 0D2C | |
| − | + | .byte $0D, $1E, $13, $00, $46, $45, $00, $00 ; 0D34 | |
| − | + | .byte $00, $45, $49, $00, $00, $00, $43, $49 ; 0D3C | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D44: | L0D44: | ||
| − | .byte $2E | + | .byte $2E, $2B, $81, $28, $2C, $43, $35, $2C ; 0D44 |
| − | + | .byte $46, $3B, $2C, $49, $35, $24, $42, $3B ; 0D4C | |
| − | + | .byte $24, $43 ; 0D54 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D56: | L0D56: | ||
| − | + | .byte $08, $09, $20, $97, $8A, $9E, $91, $9B ; 0D56 | |
| − | + | .byte $9F, $92, $A4 ; 0D5E | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D61: | L0D61: | ||
| − | + | .byte $03, $27, $14, $40, $40, $40, $01, $2D ; 0D61 | |
| − | + | .byte $14, $6A, $02, $33, $33, $42, $40, $06 ; 0D69 | |
| − | + | .byte $11, $27, $CB, $CA, $D0, $CE, $D6, $DD ; 0D71 | |
| − | |||
| − | |||
| − | |||
| − | .byte $ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D79: | L0D79: | ||
| − | + | .byte $14, $19, $80, $1A, $19, $80, $30, $19 ; 0D79 | |
| − | + | .byte $40, $36, $19, $40, $4D, $19, $40, $53 ; 0D81 | |
| − | + | .byte $19, $40 ; 0D89 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D8B: | L0D8B: | ||
| − | + | .byte $FE, $FE, $FE, $FE, $FE, $FE, $FE, $00 ; 0D8B | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0D93: | L0D93: | ||
| − | + | .byte $03, $11, $2E, $98, $92, $97 ; 0D93 | |
| − | + | L0D99: | |
| − | + | .byte $D8, $D8, $D8, $D8, $D8, $00, $70, $00 ; 0D99 | |
| − | + | .byte $70, $00, $00, $F0, $00, $7F, $00 ; 0DA1 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0DA8: | L0DA8: | ||
| − | + | .byte $18, $1A, $80, $34, $1A, $40, $51, $1A ; 0DA8 | |
| − | + | .byte $40 ; 0DB0 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0DB1: | L0DB1: | ||
| − | + | .byte $10, $10, $80, $10, $23, $40 ; 0DB1 | |
| − | |||
| − | |||
| − | |||
L0DB7: | L0DB7: | ||
| − | + | .byte $09, $08, $17, $CD, $DC, $CA, $D0, $00 ; 0DB7 | |
| − | + | .byte $DC, $CA, $CC, $CE ; 0DBF | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0DC3: | L0DC3: | ||
| − | + | .byte $C0, $80, $40, $C0, $80, $40 ; 0DC3 | |
| − | |||
| − | |||
| − | |||
| − | |||
L0DC9: | L0DC9: | ||
| − | + | .byte $F0, $F0, $F0, $F0, $00 ; 0DC9 | |
| − | |||
| − | |||
| − | |||
| − | |||
L0DCE: | L0DCE: | ||
| − | .byte $FF | + | .byte $FF, $FF, $00, $00, $00, $00, $00, $00 ; 0DCE |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0DD6: | L0DD6: | ||
| − | + | .byte $45, $45, $45, $49, $C5, $4C, $54, $C5 ; 0DD6 | |
| − | + | .byte $C7, $63, $DD, $D7, $5D, $D1, $DD, $46 ; 0DDE | |
| − | + | .byte $D4, $64, $67, $61, $DD, $DD, $DD, $D1 ; 0DE6 | |
| − | + | .byte $87, $57, $CC, $5D, $D7, $6D, $86, $76 ; 0DEE | |
| − | + | .byte $D4, $6C, $CC, $67, $61, $4B, $64, $92 ; 0DF6 | |
| − | + | .byte $76, $0C, $C5, $14, $CB, $60, $C6, $75 ; 0DFE | |
| − | + | .byte $05, $4C, $CB, $6D, $42, $54, $54, $5D ; 0E06 | |
| − | + | .byte $46, $75, $4C, $C6, $D4, $76, $76, $7B ; 0E0E | |
| − | + | .byte $8C, $C6, $A4, $54, $67, $54, $54, $51 ; 0E16 | |
| − | + | .byte $7C, $C2, $76, $7B, $CC, $B6, $76, $76 ; 0E1E | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0E26: | L0E26: | ||
| − | + | .byte $FE, $FE, $C0, $C0, $FE, $FE, $00, $00 ; 0E26 | |
| − | + | .byte $FE, $FE, $C6, $C6, $C6, $C6, $00, $00 ; 0E2E | |
| − | + | .byte $FE, $FE, $06, $06, $FE, $FE, $00, $00 ; 0E36 | |
| − | + | .byte $C6, $C6, $C6, $C6, $FE, $FE, $00, $00 ; 0E3E | |
| − | + | .byte $FE, $FE, $C0, $C0, $C6, $C6, $00, $00 ; 0E46 | |
| − | + | .byte $FE, $FE, $06, $06, $C6, $C6, $00, $00 ; 0E4E | |
| − | + | .byte $C6, $C6, $06, $06, $FE, $FE, $00, $00 ; 0E56 | |
| − | + | .byte $C6, $C6, $C0, $C0, $FE, $FE, $00, $00 ; 0E5E | |
| − | + | .byte $C6, $C6, $C0, $C0, $C6, $C6, $00, $00 ; 0E66 | |
| − | + | .byte $FE, $FE, $00, $00, $C6, $C6, $00, $00 ; 0E6E | |
| − | + | .byte $C6, $C6, $06, $06, $C6, $C6, $00, $00 ; 0E76 | |
| − | + | .byte $C6, $C6, $00, $00, $FE, $FE, $00, $00 ; 0E7E | |
| − | + | .byte $FE, $FE, $00, $00, $FE, $FE, $00, $00 ; 0E86 | |
| − | + | .byte $C6, $C6, $C6, $C6, $C6, $C6, $00, $00 ; 0E8E | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0E96: | L0E96: | ||
| − | + | .byte $04, $33, $2B, $57, $4A, $64, $4E ; 0E96 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0E9D: | L0E9D: | ||
| − | + | .byte $15, $1A, $40, $18, $0D, $40, $35, $0A ; 0E9D | |
| − | + | .byte $40, $50, $0D, $40, $12, $22, $41, $37 ; 0EA5 | |
| − | + | .byte $14, $41, $58, $22, $41, $37, $1D, $42 ; 0EAD | |
| − | + | .byte $35, $36, $43, $34, $31, $84, $36, $30 ; 0EB5 | |
| − | + | .byte $45, $2F, $30, $C6 ; 0EBD | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | .byte $2F | ||
| − | |||
| − | |||
L0EC1: | L0EC1: | ||
| − | + | .byte $10, $38, $38, $28, $28, $10, $38, $38 ; 0EC1 | |
| − | + | .byte $28, $E8, $A0, $F0, $70, $50, $50, $20 ; 0EC9 | |
| − | + | .byte $70, $70, $D8, $00, $80, $80, $80, $80 ; 0ED1 | |
| − | + | .byte $80, $E0, $E0, $00, $00, $00, $20, $78 ; 0ED9 | |
| − | + | .byte $70, $50, $50 ; 0EE1 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0EE4: | L0EE4: | ||
| − | + | .byte $08, $25, $20, $8B, $8A, $9D, $8E, $8B ; 0EE4 | |
| − | + | .byte $8A, $96, $96 ; 0EEC | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
L0EEF: | L0EEF: | ||
| − | + | .byte $F8, $88, $88, $88, $F8, $20, $60, $20 ; 0EEF | |
| − | + | .byte $20, $70, $F8, $08, $F8, $80, $F8, $F8 ; 0EF7 | |
| − | + | .byte $08, $38, $08, $F8, $88, $88, $F8, $08 ; 0EFF | |
| − | + | .byte $08, $F8, $80, $F8, $08, $F8, $80, $80 ; 0F07 | |
| − | + | .byte $F8, $88, $F8, $F8, $08, $10, $10, $10 ; 0F0F | |
| − | + | .byte $F8, $88, $F8, $88, $F8, $F8, $88, $F8 ; 0F17 | |
| − | + | .byte $08, $08, $F8, $88, $F8, $88, $88, $F8 ; 0F1F | |
| − | + | .byte $48, $78, $48, $F8, $F8, $80, $80, $80 ; 0F27 | |
| − | + | .byte $F8, $F8, $48, $48, $48, $F8, $F8, $80 ; 0F2F | |
| − | + | .byte $E0, $80, $F8, $F8, $80, $E0, $80, $80 ; 0F37 | |
| − | + | .byte $F8, $80, $98, $88, $F8, $88, $88, $F8 ; 0F3F | |
| − | + | .byte $88, $88, $F8, $20, $20, $20, $F8, $F8 ; 0F47 | |
| − | + | .byte $20, $20, $A0, $E0, $90, $A0, $C0, $A0 ; 0F4F | |
| − | + | .byte $90 ; 0F57 | |
| − | + | L0F58: | |
| − | + | .byte $00, $C8, $FF, $C8, $00, $80, $80, $80 ; 0F58 | |
| − | + | .byte $80, $F8, $88, $D8, $A8, $88, $88, $88 ; 0F60 | |
| − | + | .byte $C8, $A8, $98, $88, $F8, $88, $88, $88 ; 0F68 | |
| − | + | .byte $F8, $F8, $88, $F8, $80, $80, $F8, $88 ; 0F70 | |
| − | + | .byte $88, $90, $E8, $F8, $88, $F8, $90, $88 ; 0F78 | |
| − | + | .byte $F8, $80, $F8, $08, $F8, $F8, $20, $20 ; 0F80 | |
| − | + | .byte $20, $20, $88, $88, $88, $88, $F8, $88 ; 0F88 | |
| − | + | .byte $88, $88, $50, $20, $88, $88, $A8, $D8 ; 0F90 | |
| − | + | .byte $88, $88, $50, $20, $50, $88, $88, $88 ; 0F98 | |
| − | + | .byte $F8, $20, $20, $F8, $10, $20, $40, $F8 ; 0FA0 | |
| − | + | .byte $00, $00, $00, $00, $00, $F8, $08, $38 ; 0FA8 | |
| − | + | .byte $00, $20, $00, $00, $00, $00, $40, $20 ; 0FB0 | |
| − | + | .byte $20, $20, $00, $20, $20, $20, $F8, $20 ; 0FB8 | |
| − | + | .byte $20, $00, $00, $F8, $00, $00 ; 0FC0 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | .byte $FF | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| + | ; lr A,KU ; 0fc5 00 | ||
; bios_draw_a01fc_wrapper | ; bios_draw_a01fc_wrapper | ||
; Wrapper for BIOS routine $01FC. Used for a repeated object/sprite style draw. | ; Wrapper for BIOS routine $01FC. Used for a repeated object/sprite style draw. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
bios_draw_a01fc_wrapper: | bios_draw_a01fc_wrapper: | ||
| − | lr K,P ; | + | lr K,P ; 0FC6 08 |
| − | pi pushk ; | + | pi pushk ; 0FC7 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | jmp $01FC ; | + | jmp $01FC ; 0FCA 29 01 FC - unconditional jump |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | ; | + | ; b_drawchar_bmp_wrapper |
; Wrapper for BIOS drawchar bitmap entry. Sets r4=8 before tail-jumping into | ; Wrapper for BIOS drawchar bitmap entry. Sets r4=8 before tail-jumping into | ||
; BIOS drawchar internals. | ; BIOS drawchar internals. | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| − | + | b_drawchar_bmp_wrapper: | |
| − | lr K,P ; | + | lr K,P ; 0FCD 08 |
| − | pi pushk ; | + | pi pushk ; 0FCE 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | lis 8 ; | + | lis 8 ; 0FD1 78 |
| − | lr 4,A ; | + | lr 4,A ; 0FD2 54 |
| − | jmp | + | jmp b_drawchar_bmp_entry ; 0FD3 29 06 8A - unconditional jump |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| Line 1,723: | Line 924: | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
bios_score_prompt_wrapper: | bios_score_prompt_wrapper: | ||
| − | lr K,P ; | + | lr K,P ; 0FD6 08 |
| − | pi pushk ; | + | pi pushk ; 0FD7 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | lisu 2 ; | + | lisu 2 ; 0FDA 62 |
| − | lisl 6 ; | + | lisl 6 ; 0FDB 6E |
| − | li $99 ; | + | li $99 ; 0FDC 20 99 |
| − | lr I,A ; | + | lr I,A ; 0FDE 5D - store A and increment ISAR |
| − | lr S,A ; | + | lr S,A ; 0FDF 5C - store A in selected scratchpad register |
| − | pi | + | pi b_score_left ; 0FE0 28 02 AC |
| − | pi | + | pi b_score_right ; 0FE3 28 02 B5 |
| − | pi popk ; | + | pi popk ; 0FE6 28 01 1E - restore return address from BIOS K-stack |
| − | pk ; | + | pk ; 0FE9 0C - return via K/P after BIOS K-stack restore |
| − | |||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| Line 1,741: | Line 941: | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
clear_screen_o37_0: | clear_screen_o37_0: | ||
| − | clr ; | + | clr ; 0FEA 70 |
| − | + | br clear_screen_common ; 0FEB 90 02 - unconditional jump | |
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| Line 1,749: | Line 949: | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
clear_screen_o37_1: | clear_screen_o37_1: | ||
| − | lis 1 ; | + | lis 1 ; 0FED 71 |
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
| Line 1,757: | Line 957: | ||
; ----------------------------------------------------------------------------- | ; ----------------------------------------------------------------------------- | ||
clear_screen_common: | clear_screen_common: | ||
| − | lisu 3 ; | + | lisu 3 ; 0FEE 63 |
| − | lisl 7 ; | + | lisl 7 ; 0FEF 6F |
| − | lr S,A ; | + | lr S,A ; 0FF0 5C - store A in selected scratchpad register |
| − | lr K,P ; | + | lr K,P ; 0FF1 08 |
| − | pi pushk ; | + | pi pushk ; 0FF2 28 01 07 - bios pushk - save return address on BIOS K-stack |
| − | li $D0 ; | + | li $D0 ; 0FF5 20 D0 |
| − | as 3 ; | + | as 3 ; 0FF7 C3 |
| − | lr 3,A ; | + | lr 3,A ; 0FF8 53 |
| − | pi | + | pi clrscrn ; 0FF9 28 00 D0 - bios clear screen routine |
| − | pi popk ; | + | pi popk ; 0FFC 28 01 1E - restore return address from BIOS K-stack |
| − | pk ; | + | pk ; 0FFF 0C - return via K/P after BIOS K-stack restore |
| − | + | IF 0 | |
| + | ; Smart data report | ||
| + | ; ================= | ||
| + | ; Mode: enabled by -s or /s | ||
| + | ; Memory range: $0800-$0FFF | ||
| + | ; Code bytes: 1070 | ||
| + | ; Data bytes: 978 | ||
| + | ; | ||
| + | ; DCI data roots from reachable code: | ||
| + | ; $0BC6 from $0809 | ||
| + | ; $0BCF from $0816 | ||
| + | ; $0BD8 from $0845 | ||
| + | ; $0BE6 from $086B | ||
| + | ; $0C98 from $0878 | ||
| + | ; $0CC8 from $0899 | ||
| + | ; $0CC8 from $08A8 | ||
| + | ; $0CC8 from $08B7 | ||
| + | ; $0CC8 from $08C3 | ||
| + | ; $0CD0 from $08C9 | ||
| + | ; $0C00 from $08FD | ||
| + | ; $0C1B from $0907 | ||
| + | ; $0BF9 from $0914 | ||
| + | ; $0EEF from $0BB0 | ||
| + | ; $0E9D from $0B57 | ||
| + | ; $0EC1 from $0B63 | ||
| + | ; $0EE4 from $0B6D | ||
| + | ; $0C76 from $099D | ||
| + | ; $0C34 from $09B3 | ||
| + | ; $0C67 from $09B7 | ||
| + | ; $0C5C from $09CA | ||
| + | ; $0CDE from $09DA | ||
| + | ; $0CF9 from $09E4 | ||
| + | ; $0D08 from $09EE | ||
| + | ; $0D14 from $0A18 | ||
| + | ; $0D44 from $0A32 | ||
| + | ; $0D56 from $0A43 | ||
| + | ; $0D61 from $0A53 | ||
| + | ; $0D79 from $0A6F | ||
| + | ; $0D8B from $0A7B | ||
| + | ; $0D99 from $0A85 | ||
| + | ; $0DA8 from $0A89 | ||
| + | ; $0D93 from $0A9C | ||
| + | ; $0DB1 from $0AA7 | ||
| + | ; $0F58 from $0AB3 | ||
| + | ; $0DC3 from $0AD8 | ||
| + | ; $0DC9 from $0AE0 | ||
| + | ; $0DCE from $0AF5 | ||
| + | ; $0DCE from $0B01 | ||
| + | ; $0DB7 from $0B0A | ||
| + | ; $0DD6 from $0B15 | ||
| + | ; $0E26 from $0B2A | ||
| + | ; $0E26 from $0B33 | ||
| + | ; $0E96 from $0B4C | ||
| + | ; | ||
| + | ; Data intervals emitted as .byte: | ||
| + | ; $0BF4-$0FC5 (978 bytes) | ||
| + | ENDIF | ||
Latest revision as of 00:34, 5 August 2026
This is a disassembly of the Channel F Democart 2. Original code is copyright © 1977 Fairchild Semiconductor.
; ----------------------------------------------------------------------------- ; Annotated and formatted Democart 2 disassembly. ; ----------------------------------------------------------------------------- processor f8 org $0800 reset equ $0000 delay equ $008F clrscrn equ $00D0 pushk equ $0107 popk equ $011E drawchar equ $0679 drawchar_entry equ $067C b_drawchar_bmp_entry equ $068A b_score_left equ $02AC b_score_right equ $02B5 cartridge_start: .byte $55, $2B ; ----------------------------------------------------------------------------- ; Main Democart 2 script. Shows multiple demo screens, uses BIOS text and ; graphics routines, then returns to BIOS reset. ; ----------------------------------------------------------------------------- cartridge_entry: lisu 3 ; 0802 63 lisl 7 ; 0803 6F lis 1 ; 0804 71 lr S,A ; 0805 5C - store A in selected scratchpad register pi $0135 ; 0806 28 01 35 dci L0BC6 ; 0809 2A 0B C6 - load DC with data/code pointer pi draw_stream ; 080C 28 0B A3 lisu 3 ; 080F 63 lisl 7 ; 0810 6F lis 3 ; 0811 73 lr S,A ; 0812 5C - store A in selected scratchpad register pi $0135 ; 0813 28 01 35 dci L0BCF ; 0816 2A 0B CF - load DC with data/code pointer pi draw_stream ; 0819 28 0B A3 lis 6 ; 081C 76 lr 3,A ; 081D 53 pi clear_screen_o37_0 ; 081E 28 0F EA li $26 ; 0821 20 26 lr 1,A ; 0823 51 li $14 ; 0824 20 14 lr 2,A ; 0826 52 li $28 ; 0827 20 28 lr 3,A ; 0829 53 pi draw_entity_wrapper ; 082A 28 0B 76 li $26 ; 082D 20 26 lr 1,A ; 082F 51 li $21 ; 0830 20 21 lr 2,A ; 0832 52 li $28 ; 0833 20 28 lr 3,A ; 0835 53 pi draw_entity_wrapper ; 0836 28 0B 76 li $33 ; 0839 20 33 lr 1,A ; 083B 51 pi draw_three_markers ; 083C 28 0B 7D li $41 ; 083F 20 41 lr 1,A ; 0841 51 pi draw_three_markers ; 0842 28 0B 7D dci L0BD8 ; 0845 2A 0B D8 - load DC with data/code pointer pi draw_stream ; 0848 28 0B A3 clr ; 084B 70 lr 3,A ; 084C 53 pi clear_screen_o37_1 ; 084D 28 0F ED li $14 ; 0850 20 14 lr 1,A ; 0852 51 lis 6 ; 0853 76 lr 2,A ; 0854 52 pi $020E ; 0855 28 02 0E li $14 ; 0858 20 14 lr 1,A ; 085A 51 li $2E ; 085B 20 2E lr 2,A ; 085D 52 pi $020E ; 085E 28 02 0E li $12 ; 0861 20 12 lr 1,A ; 0863 51 lr 2,A ; 0864 52 li $58 ; 0865 20 58 lr 0,A ; 0867 50 pi drawchar ; 0868 28 06 79 - BIOS draw character routine dci L0BE6 ; 086B 2A 0B E6 - load DC with data/code pointer pi draw_stream ; 086E 28 0B A3 lis 6 ; 0871 76 lr 3,A ; 0872 53 pi clear_screen_o37_0 ; 0873 28 0F EA lis 6 ; 0876 76 lr $A,A ; 0877 5A dci L0C98 ; 0878 2A 0C 98 - load DC with data/code pointer li $20 ; 087B 20 20 lr 1,A ; 087D 51 lr 2,A ; 087E 52 L087F: li $80 ; 087F 20 80 lr 0,A ; 0881 50 pi b_drawchar_bmp_wrapper ; 0882 28 0F CD lis 2 ; 0885 72 as 1 ; 0886 C1 lr 1,A ; 0887 51 ds $A ; 0888 3A bnz L087F ; 0889 94 F5 pi short_delay ; 088B 28 0B 96 lis 6 ; 088E 76 lr 3,A ; 088F 53 pi clear_screen_o37_0 ; 0890 28 0F EA li $18 ; 0893 20 18 lr 2,A ; 0895 52 li $30 ; 0896 20 30 lr 1,A ; 0898 51 dci L0CC8 ; 0899 2A 0C C8 - load DC with data/code pointer li $80 ; 089C 20 80 lr 0,A ; 089E 50 pi b_drawchar_bmp_wrapper ; 089F 28 0F CD lis 2 ; 08A2 72 as 1 ; 08A3 C1 lr 1,A ; 08A4 51 li $80 ; 08A5 20 80 lr 0,A ; 08A7 50 dci L0CC8 ; 08A8 2A 0C C8 - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 08AB 28 0F CD li $30 ; 08AE 20 30 lr 1,A ; 08B0 51 li $20 ; 08B1 20 20 lr 2,A ; 08B3 52 li $80 ; 08B4 20 80 lr 0,A ; 08B6 50 dci L0CC8 ; 08B7 2A 0C C8 - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 08BA 28 0F CD lis 2 ; 08BD 72 as 1 ; 08BE C1 lr 1,A ; 08BF 51 li $80 ; 08C0 20 80 lr 0,A ; 08C2 50 dci L0CC8 ; 08C3 2A 0C C8 - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 08C6 28 0F CD dci L0CD0 ; 08C9 2A 0C D0 - load DC with data/code pointer pi draw_stream ; 08CC 28 0B A3 lis 6 ; 08CF 76 lr 3,A ; 08D0 53 pi clear_screen_o37_1 ; 08D1 28 0F ED li $13 ; 08D4 20 13 lr 1,A ; 08D6 51 lis 6 ; 08D7 76 lr 2,A ; 08D8 52 pi $020E ; 08D9 28 02 0E li $13 ; 08DC 20 13 lr 1,A ; 08DE 51 li $2F ; 08DF 20 2F lr 2,A ; 08E1 52 pi $020E ; 08E2 28 02 0E li $11 ; 08E5 20 11 lr 1,A ; 08E7 51 lis 9 ; 08E8 79 lr 2,A ; 08E9 52 li $24 ; 08EA 20 24 lr 3,A ; 08EC 53 pi bios_draw_a01fc_wrapper ; 08ED 28 0F C6 li $5A ; 08F0 20 5A lr 1,A ; 08F2 51 lis 9 ; 08F3 79 lr 2,A ; 08F4 52 li $24 ; 08F5 20 24 lr 3,A ; 08F7 53 pi bios_draw_a01fc_wrapper ; 08F8 28 0F C6 lis 9 ; 08FB 79 lr 4,A ; 08FC 54 dci L0C00 ; 08FD 2A 0C 00 - load DC with data/code pointer L0900: lm ; 0900 16 - load byte from DC and increment DC lr 1,A ; 0901 51 lm ; 0902 16 - load byte from DC and increment DC lr 2,A ; 0903 52 lm ; 0904 16 - load byte from DC and increment DC lr 0,A ; 0905 50 xdc ; 0906 2C - exchange DC and H pointers dci $0C1B ; 0907 2A 0C 1B - load DC with data/code pointer pi drawchar_entry ; 090A 28 06 7C xdc ; 090D 2C - exchange DC and H pointers ds 4 ; 090E 34 bnz L0900 ; 090F 94 F0 pi bios_score_prompt_wrapper ; 0911 28 0F D6 dci L0BF9 ; 0914 2A 0B F9 - load DC with data/code pointer pi draw_stream ; 0917 28 0B A3 lis 6 ; 091A 76 lr 3,A ; 091B 53 pi clear_screen_o37_0 ; 091C 28 0F EA clr ; 091F 70 lr 2,A ; 0920 52 lr 0,A ; 0921 50 lis $D ; 0922 7D lr $A,A ; 0923 5A L0924: li $7E ; 0924 20 7E lr 1,A ; 0926 51 pi drawchar ; 0927 28 06 79 - BIOS draw character routine lr A,2 ; 092A 42 inc ; 092B 1F lr 2,A ; 092C 52 ds $A ; 092D 3A bnz L0924 ; 092E 94 F5 L0930: lis 4 ; 0930 74 as 2 ; 0931 C2 lr 2,A ; 0932 52 lis 3 ; 0933 73 lr 1,A ; 0934 51 L0935: li $C0 ; 0935 20 C0 lr 0,A ; 0937 50 dci $4000 ; 0938 2A 40 00 - load DC with data/code pointer ; Points data counter to unused area. ; Hardware holds the proper value. pi drawchar_entry ; 093B 28 06 7C ds 1 ; 093E 31 lr A,1 ; 093F 41 ci $77 ; 0940 25 77 bc L0935 ; 0942 82 F2 lr A,2 ; 0944 42 ci $28 ; 0945 25 28 bc L0930 ; 0947 82 E8 lis 3 ; 0949 73 lr $A,A ; 094A 5A li $26 ; 094B 20 26 lr 2,A ; 094D 52 L094E: lis 8 ; 094E 78 lr 1,A ; 094F 51 clr ; 0950 70 lr 0,A ; 0951 50 L0952: pi drawchar ; 0952 28 06 79 - BIOS draw character routine lis 2 ; 0955 72 as 2 ; 0956 C2 lr 2,A ; 0957 52 ds 1 ; 0958 31 ds $A ; 0959 3A bnz L0952 ; 095A 94 F7 pi drawchar ; 095C 28 06 79 - BIOS draw character routine lr A,2 ; 095F 42 inc ; 0960 1F lr 2,A ; 0961 52 ds 1 ; 0962 31 pi drawchar ; 0963 28 06 79 - BIOS draw character routine lr A,2 ; 0966 42 ci $31 ; 0967 25 31 bnc L0973 ; 0969 92 09 li $2B ; 096B 20 2B lr 2,A ; 096D 52 lis 3 ; 096E 73 lr $A,A ; 096F 5A jmp L094E ; 0970 29 09 4E - unconditional jump L0973: nop ; 0973 2B clr ; 0974 70 lr 0,A ; 0975 50 li $2D ; 0976 20 2D lr 2,A ; 0978 52 L0979: li $53 ; 0979 20 53 lr 1,A ; 097B 51 pi drawchar ; 097C 28 06 79 - BIOS draw character routine ds 1 ; 097F 31 ds 2 ; 0980 32 pi drawchar ; 0981 28 06 79 - BIOS draw character routine lis 3 ; 0984 73 lr $A,A ; 0985 5A L0986: ds 2 ; 0986 32 ds 2 ; 0987 32 ds 1 ; 0988 31 pi drawchar ; 0989 28 06 79 - BIOS draw character routine ds $A ; 098C 3A bnz L0986 ; 098D 94 F8 lr A,2 ; 098F 42 ci $27 ; 0990 25 27 bnc L099A ; 0992 92 07 li $30 ; 0994 20 30 lr 2,A ; 0996 52 jmp L0979 ; 0997 29 09 79 - unconditional jump L099A: pi bios_score_prompt_wrapper ; 099A 28 0F D6 dci L0C76 ; 099D 2A 0C 76 - load DC with data/code pointer li $69 ; 09A0 20 69 lr $A,A ; 09A2 5A pi draw_stream ; 09A3 28 0B A3 pi draw_stream ; 09A6 28 0B A3 clr ; 09A9 70 lr $A,A ; 09AA 5A pi draw_stream ; 09AB 28 0B A3 lis 3 ; 09AE 73 lr 3,A ; 09AF 53 pi clear_screen_o37_0 ; 09B0 28 0F EA dci L0C34 ; 09B3 2A 0C 34 - load DC with data/code pointer xdc ; 09B6 2C - exchange DC and H pointers dci L0C67 ; 09B7 2A 0C 67 - load DC with data/code pointer lis 5 ; 09BA 75 lr $A,A ; 09BB 5A L09BC: lm ; 09BC 16 - load byte from DC and increment DC lr 1,A ; 09BD 51 lm ; 09BE 16 - load byte from DC and increment DC lr 2,A ; 09BF 52 lm ; 09C0 16 - load byte from DC and increment DC lr 0,A ; 09C1 50 xdc ; 09C2 2C - exchange DC and H pointers pi b_drawchar_bmp_wrapper ; 09C3 28 0F CD xdc ; 09C6 2C - exchange DC and H pointers ds $A ; 09C7 3A bnz L09BC ; 09C8 94 F3 dci L0C5C ; 09CA 2A 0C 5C - load DC with data/code pointer pi draw_stream ; 09CD 28 0B A3 lis 3 ; 09D0 73 lr 3,A ; 09D1 53 pi clear_screen_o37_1 ; 09D2 28 0F ED pi bios_score_prompt_wrapper ; 09D5 28 0F D6 lis 9 ; 09D8 79 lr $A,A ; 09D9 5A dci L0CDE ; 09DA 2A 0C DE - load DC with data/code pointer L09DD: lm ; 09DD 16 - load byte from DC and increment DC lr 1,A ; 09DE 51 lm ; 09DF 16 - load byte from DC and increment DC lr 2,A ; 09E0 52 lm ; 09E1 16 - load byte from DC and increment DC lr 0,A ; 09E2 50 xdc ; 09E3 2C - exchange DC and H pointers dci $0CF9 ; 09E4 2A 0C F9 - load DC with data/code pointer pi drawchar_entry ; 09E7 28 06 7C xdc ; 09EA 2C - exchange DC and H pointers ds $A ; 09EB 3A bnz L09DD ; 09EC 94 F0 dci $0D08 ; 09EE 2A 0D 08 - load DC with data/code pointer pi draw_stream ; 09F1 28 0B A3 lis 3 ; 09F4 73 lr 3,A ; 09F5 53 pi clear_screen_o37_1 ; 09F6 28 0F ED pi bios_score_prompt_wrapper ; 09F9 28 0F D6 li $10 ; 09FC 20 10 lr 1,A ; 09FE 51 li $1A ; 09FF 20 1A lr 2,A ; 0A01 52 li $10 ; 0A02 20 10 lr 3,A ; 0A04 53 pi draw_entity_wrapper ; 0A05 28 0B 76 lis 2 ; 0A08 72 lr $A,A ; 0A09 5A L0A0A: lis $F ; 0A0A 7F lr 3,A ; 0A0B 53 lis $F ; 0A0C 7F as 1 ; 0A0D C1 lr 1,A ; 0A0E 51 pi draw_entity_wrapper ; 0A0F 28 0B 76 ds $A ; 0A12 3A bnz L0A0A ; 0A13 94 F6 li $69 ; 0A15 20 69 lr $A,A ; 0A17 5A dci L0D14 ; 0A18 2A 0D 14 - load DC with data/code pointer pi draw_stream ; 0A1B 28 0B A3 pi draw_stream ; 0A1E 28 0B A3 pi draw_stream ; 0A21 28 0B A3 li $30 ; 0A24 20 30 lr 1,A ; 0A26 51 li $28 ; 0A27 20 28 lr 2,A ; 0A29 52 li $10 ; 0A2A 20 10 lr 3,A ; 0A2C 53 pi draw_entity_wrapper ; 0A2D 28 0B 76 lis 6 ; 0A30 76 lr $A,A ; 0A31 5A dci L0D44 ; 0A32 2A 0D 44 - load DC with data/code pointer L0A35: lm ; 0A35 16 - load byte from DC and increment DC lr 1,A ; 0A36 51 lm ; 0A37 16 - load byte from DC and increment DC lr 2,A ; 0A38 52 lm ; 0A39 16 - load byte from DC and increment DC lr 0,A ; 0A3A 50 xdc ; 0A3B 2C - exchange DC and H pointers pi drawchar ; 0A3C 28 06 79 - BIOS draw character routine xdc ; 0A3F 2C - exchange DC and H pointers ds $A ; 0A40 3A bnz L0A35 ; 0A41 94 F3 dci L0D56 ; 0A43 2A 0D 56 - load DC with data/code pointer clr ; 0A46 70 lr $A,A ; 0A47 5A pi draw_stream ; 0A48 28 0B A3 lis 6 ; 0A4B 76 lr 3,A ; 0A4C 53 pi clear_screen_o37_1 ; 0A4D 28 0F ED pi bios_score_prompt_wrapper ; 0A50 28 0F D6 dci L0D61 ; 0A53 2A 0D 61 - load DC with data/code pointer li $69 ; 0A56 20 69 lr $A,A ; 0A58 5A pi draw_stream ; 0A59 28 0B A3 pi draw_stream ; 0A5C 28 0B A3 pi draw_stream ; 0A5F 28 0B A3 clr ; 0A62 70 lr $A,A ; 0A63 5A pi draw_stream ; 0A64 28 0B A3 lis 6 ; 0A67 76 lr 3,A ; 0A68 53 pi clear_screen_o37_1 ; 0A69 28 0F ED pi bios_score_prompt_wrapper ; 0A6C 28 0F D6 dci L0D79 ; 0A6F 2A 0D 79 - load DC with data/code pointer lis 6 ; 0A72 76 lr $A,A ; 0A73 5A L0A74: lm ; 0A74 16 - load byte from DC and increment DC lr 1,A ; 0A75 51 lm ; 0A76 16 - load byte from DC and increment DC lr 2,A ; 0A77 52 lm ; 0A78 16 - load byte from DC and increment DC lr 0,A ; 0A79 50 xdc ; 0A7A 2C - exchange DC and H pointers dci L0D8B ; 0A7B 2A 0D 8B - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 0A7E 28 0F CD xdc ; 0A81 2C - exchange DC and H pointers ds $A ; 0A82 3A bnz L0A74 ; 0A83 94 F0 dci $0D99 ; 0A85 2A 0D 99 - load DC with data/code pointer xdc ; 0A88 2C - exchange DC and H pointers dci L0DA8 ; 0A89 2A 0D A8 - load DC with data/code pointer lis 3 ; 0A8C 73 lr $A,A ; 0A8D 5A L0A8E: lm ; 0A8E 16 - load byte from DC and increment DC lr 1,A ; 0A8F 51 lm ; 0A90 16 - load byte from DC and increment DC lr 2,A ; 0A91 52 lm ; 0A92 16 - load byte from DC and increment DC lr 0,A ; 0A93 50 xdc ; 0A94 2C - exchange DC and H pointers pi drawchar_entry ; 0A95 28 06 7C xdc ; 0A98 2C - exchange DC and H pointers ds $A ; 0A99 3A bnz L0A8E ; 0A9A 94 F3 dci L0D93 ; 0A9C 2A 0D 93 - load DC with data/code pointer pi draw_stream ; 0A9F 28 0B A3 lis 6 ; 0AA2 76 lr 3,A ; 0AA3 53 pi clear_screen_o37_0 ; 0AA4 28 0F EA dci L0DB1 ; 0AA7 2A 0D B1 - load DC with data/code pointer lis 2 ; 0AAA 72 lr $A,A ; 0AAB 5A L0AAC: lm ; 0AAC 16 - load byte from DC and increment DC lr 1,A ; 0AAD 51 lm ; 0AAE 16 - load byte from DC and increment DC lr 2,A ; 0AAF 52 lm ; 0AB0 16 - load byte from DC and increment DC lr 0,A ; 0AB1 50 xdc ; 0AB2 2C - exchange DC and H pointers dci $0F58 ; 0AB3 2A 0F 58 - load DC with data/code pointer pi drawchar_entry ; 0AB6 28 06 7C xdc ; 0AB9 2C - exchange DC and H pointers ds $A ; 0ABA 3A bnz L0AAC ; 0ABB 94 F0 lis 4 ; 0ABD 74 lr $A,A ; 0ABE 5A li $10 ; 0ABF 20 10 lr 2,A ; 0AC1 52 L0AC2: li $17 ; 0AC2 20 17 lr 1,A ; 0AC4 51 li $81 ; 0AC5 20 81 lr 0,A ; 0AC7 50 pi drawchar ; 0AC8 28 06 79 - BIOS draw character routine lis 5 ; 0ACB 75 as 2 ; 0ACC C2 lr 2,A ; 0ACD 52 ci $27 ; 0ACE 25 27 bc L0AC2 ; 0AD0 82 F1 li $1A ; 0AD2 20 1A lr 1,A ; 0AD4 51 li $1A ; 0AD5 20 1A lr 2,A ; 0AD7 52 dci L0DC3 ; 0AD8 2A 0D C3 - load DC with data/code pointer lis 6 ; 0ADB 76 lr $A,A ; 0ADC 5A L0ADD: lm ; 0ADD 16 - load byte from DC and increment DC lr 0,A ; 0ADE 50 xdc ; 0ADF 2C - exchange DC and H pointers dci L0DC9 ; 0AE0 2A 0D C9 - load DC with data/code pointer pi drawchar_entry ; 0AE3 28 06 7C ds 1 ; 0AE6 31 ds 1 ; 0AE7 31 xdc ; 0AE8 2C - exchange DC and H pointers ds $A ; 0AE9 3A bnz L0ADD ; 0AEA 94 F2 li $2C ; 0AEC 20 2C lr 2,A ; 0AEE 52 li $12 ; 0AEF 20 12 lr 1,A ; 0AF1 51 li $80 ; 0AF2 20 80 lr 0,A ; 0AF4 50 dci L0DCE ; 0AF5 2A 0D CE - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 0AF8 28 0F CD li $43 ; 0AFB 20 43 lr 1,A ; 0AFD 51 li $40 ; 0AFE 20 40 lr 0,A ; 0B00 50 dci L0DCE ; 0B01 2A 0D CE - load DC with data/code pointer pi b_drawchar_bmp_wrapper ; 0B04 28 0F CD pi bios_score_prompt_wrapper ; 0B07 28 0F D6 dci L0DB7 ; 0B0A 2A 0D B7 - load DC with data/code pointer pi draw_stream ; 0B0D 28 0B A3 lis 6 ; 0B10 76 lr 3,A ; 0B11 53 pi clear_screen_o37_0 ; 0B12 28 0F EA dci L0DD6 ; 0B15 2A 0D D6 - load DC with data/code pointer lis 8 ; 0B18 78 lr 2,A ; 0B19 52 L0B1A: lis $F ; 0B1A 7F L0B1B: lr 1,A ; 0B1B 51 li $C0 ; 0B1C 20 C0 lr 0,A ; 0B1E 50 lm ; 0B1F 16 - load byte from DC and increment DC xdc ; 0B20 2C - exchange DC and H pointers lr $A,A ; 0B21 5A sr 4 ; 0B22 14 sl 4 ; 0B23 15 sr 1 ; 0B24 12 lr $B,A ; 0B25 5B lr A,$A ; 0B26 4A sl 4 ; 0B27 15 sr 1 ; 0B28 12 lr $A,A ; 0B29 5A dci L0E26 ; 0B2A 2A 0E 26 - load DC with data/code pointer lr A,$B ; 0B2D 4B adc ; 0B2E 8E pi b_drawchar_bmp_wrapper ; 0B2F 28 0F CD ds 1 ; 0B32 31 dci L0E26 ; 0B33 2A 0E 26 - load DC with data/code pointer lr A,$A ; 0B36 4A adc ; 0B37 8E li $C0 ; 0B38 20 C0 lr 0,A ; 0B3A 50 pi b_drawchar_bmp_wrapper ; 0B3B 28 0F CD xdc ; 0B3E 2C - exchange DC and H pointers ds 1 ; 0B3F 31 lr A,1 ; 0B40 41 ci $5A ; 0B41 25 5A bc L0B1B ; 0B43 82 D7 lis 4 ; 0B45 74 as 2 ; 0B46 C2 lr 2,A ; 0B47 52 ci $2F ; 0B48 25 2F bc L0B1A ; 0B4A 82 CF dci L0E96 ; 0B4C 2A 0E 96 - load DC with data/code pointer pi draw_stream ; 0B4F 28 0B A3 lis 6 ; 0B52 76 lr 3,A ; 0B53 53 pi clear_screen_o37_0 ; 0B54 28 0F EA L0B57: dci L0E9D ; 0B57 2A 0E 9D - load DC with data/code pointer lis $C ; 0B5A 7C L0B5B: lr $A,A ; 0B5B 5A L0B5C: lm ; 0B5C 16 - load byte from DC and increment DC lr 1,A ; 0B5D 51 lm ; 0B5E 16 - load byte from DC and increment DC lr 2,A ; 0B5F 52 lm ; 0B60 16 - load byte from DC and increment DC lr 0,A ; 0B61 50 xdc ; 0B62 2C - exchange DC and H pointers dci L0EC1 ; 0B63 2A 0E C1 - load DC with data/code pointer pi drawchar_entry ; 0B66 28 06 7C xdc ; 0B69 2C - exchange DC and H pointers ds $A ; 0B6A 3A bnz L0B5C ; 0B6B 94 F0 dci L0EE4 ; 0B6D 2A 0E E4 - load DC with data/code pointer pi draw_stream ; 0B70 28 0B A3 jmp reset ; 0B73 29 00 00 - unconditional jump ; ----------------------------------------------------------------------------- ; Wrapper around BIOS draw routine at $0215. Saves K, then tail-jumps into BIOS ; code. ; ----------------------------------------------------------------------------- draw_entity_wrapper: lr K,P ; 0B76 08 pi pushk ; 0B77 28 01 07 - bios pushk - save return address on BIOS K-stack jmp $0215 ; 0B7A 29 02 15 - bios, calls draw char - unconditional jump ; ----------------------------------------------------------------------------- ; Draws three repeated BIOS objects at fixed Y positions $0A, $17 and $24 using ; BIOS routine $01F6. ; ----------------------------------------------------------------------------- draw_three_markers: lr K,P ; 0B7D 08 pi pushk ; 0B7E 28 01 07 - bios pushk - save return address on BIOS K-stack lis $A ; 0B81 7A lr 2,A ; 0B82 52 pi $01F6 ; 0B83 28 01 F6 li $17 ; 0B86 20 17 lr 2,A ; 0B88 52 pi $01F6 ; 0B89 28 01 F6 li $24 ; 0B8C 20 24 lr 2,A ; 0B8E 52 pi $01F6 ; 0B8F 28 01 F6 pi popk ; 0B92 28 01 1E - restore return address from BIOS K-stack pk ; 0B95 0C - return via K/P after BIOS K-stack restore ; ----------------------------------------------------------------------------- ; Short delay helper. Uses r0 as outer counter and r5 as BIOS delay parameter. ; ----------------------------------------------------------------------------- short_delay: lr K,P ; 0B96 08 lis 3 ; 0B97 73 lr 0,A ; 0B98 50 lis $F ; 0B99 7F lr 5,A ; 0B9A 55 short_delay_loop: pi delay ; 0B9B 28 00 8F ds 0 ; 0B9E 30 bnz short_delay_loop ; 0B9F 94 FB lr P,K ; 0BA1 09 pop ; 0BA2 1C - return from subroutine ; ----------------------------------------------------------------------------- ; Draws a compressed or data-driven text/object stream. DC points at stream ; header: count, Y, X, then character/object bytes. ; ----------------------------------------------------------------------------- draw_stream: lr K,P ; 0BA3 08 pi pushk ; 0BA4 28 01 07 - bios pushk - save return address on BIOS K-stack lm ; 0BA7 16 - load byte from DC and increment DC lr 3,A ; 0BA8 53 lm ; 0BA9 16 - load byte from DC and increment DC lr 2,A ; 0BAA 52 lm ; 0BAB 16 - load byte from DC and increment DC lr 1,A ; 0BAC 51 ; ----------------------------------------------------------------------------- ; Inner stream loop. Loads one stream item from DC and draws through BIOS ; drawchar entry with alternate glyph/data pointer. ; ----------------------------------------------------------------------------- draw_stream_next: lm ; 0BAD 16 - load byte from DC and increment DC lr 0,A ; 0BAE 50 xdc ; 0BAF 2C - exchange DC and H pointers dci L0EEF ; 0BB0 2A 0E EF - load DC with data/code pointer ; ----------------------------------------------------------------------------- ; Calls BIOS drawchar entry for one stream item, advances, and repeats until ; count expires. ; ----------------------------------------------------------------------------- draw_stream_call: pi drawchar_entry ; 0BB3 28 06 7C xdc ; 0BB6 2C - exchange DC and H pointers ds 3 ; 0BB7 33 bnz draw_stream_next ; 0BB8 94 F4 lr A,$A ; 0BBA 4A ci $69 ; 0BBB 25 69 bz draw_stream_done ; 0BBD 84 04 pi short_delay ; 0BBF 28 0B 96 ; ----------------------------------------------------------------------------- ; Restores return address from BIOS K-stack and returns from stream drawing ; routine. ; ----------------------------------------------------------------------------- draw_stream_done: pi popk ; 0BC2 28 01 1E - restore return address from BIOS K-stack pk ; 0BC5 0C - return via K/P after BIOS K-stack restore L0BC6: lr QU,A ; 0BC6 06 sl 1 ; 0BC7 13 out $91 ; 0BC8 27 91 bf 9,L0B57 ; 0BCA 99 8C bnz L0B5B ; 0BCC 94 8E db $A3 ; 0BCE A3 L0BCF: lr QU,A ; 0BCF 06 oi $26 ; 0BD0 22 26 lr D,A ; 0BD2 5E - store A and decrement ISAR lr A,D ; 0BD3 4E - read selected scratchpad register and decrement ISAR lr 8,A ; 0BD4 58 lr 8,A ; 0BD5 58 lr 2,A ; 0BD6 52 lr I,A ; 0BD7 5D - store A and increment ISAR L0BD8: lr IS,A ; 0BD8 0B ds 1 ; 0BD9 31 di ; 0BDA 1A bf $E, L0B6E ; 0BDB 9E 92 xm ; 0BDD 8C lr A,KU ; 0BDE 00 lr D,A ; 0BDF 5E - store A and decrement ISAR lr A,$A ; 0BE0 4A lr A,S ; 0BE1 4C - read selected scratchpad register lr A,KU ; 0BE2 00 asd D ; 0BE3 DE asd 9 ; 0BE4 D9 as D ; 0BE5 CE L0BE6: lr DC,H ; 0BE6 10 li $0A ; 0BE7 20 0A bf $D, L0B7B ; 0BE9 9D 91 bf 9, L0B85 ; 0BEB 99 99 bf $E, L0B80 ; 0BED 9E 92 bno L0B80 ; 0BEF 98 90 lr A,KU ; 0BF1 00 br draw_three_markers ; 0BF2 90 8A - unconditional jump ; ----------------------------------------------------------------------------- ; data_tables ; Smart disassembly marks $0BF4-$0FC5 as data. ; ----------------------------------------------------------------------------- L0BF4: .byte $96, $96, $8E, $9C, $A3 ; 0BF4 L0BF9: .byte $04, $2B, $2D, $5E, $4A, $58, $54 ; 0BF9 L0C00: .byte $2A, $10, $C0, $42, $10, $C0, $36, $1B ; 0C00 .byte $C0, $2A, $25, $C0, $42, $25, $C0, $19 ; 0C08 .byte $0D, $83, $52, $28, $84, $17, $0B, $C1 ; 0C10 .byte $54, $2A, $42 ; 0C18 L0C1B: .byte $00, $20, $70, $20, $00, $20, $70, $E0 ; 0C1B .byte $50, $08, $80, $50, $38, $70, $20, $08 ; 0C23 .byte $08, $08, $08, $F8, $F8, $80, $80, $80 ; 0C2B .byte $80 ; 0C33 L0C34: .byte $0E, $FF, $FF, $3F, $2A, $2E, $2A, $2E ; 0C34 .byte $70, $FF, $FF, $FC, $54, $74, $54, $74 ; 0C3C .byte $5D, $55, $5D, $55, $5D, $55, $5D, $55 ; 0C44 .byte $00, $40, $60, $7D, $7F, $7D, $00, $00 ; 0C4C .byte $00, $02, $06, $BE, $FE, $BE, $00, $00 ; 0C54 L0C5C: .byte $08, $13, $1F, $9D, $9A, $92, $9E, $8F ; 0C5C .byte $92, $9C, $8E ; 0C64 L0C67: .byte $30, $2E, $C0, $33, $2E, $C0, $31, $33 ; 0C67 .byte $C0, $0B, $32, $80, $5C, $32, $40 ; 0C6F L0C76: .byte $0C, $0B, $17, $40, $45, $40, $40, $00 ; 0C76 .byte $00, $00, $00, $40, $45, $40, $40, $04 ; 0C7E .byte $33, $2E, $4B, $4E, $5E, $66, $09, $1C ; 0C86 .byte $20, $4B, $56, $4A, $4C, $54, $53, $4A ; 0C8E .byte $4C, $54 ; 0C96 L0C98: .byte $F8, $84, $82, $81, $81, $81, $81, $FF ; 0C98 .byte $00, $00, $00, $1C, $23, $22, $22, $DC ; 0CA0 .byte $00, $00, $00, $78, $C7, $44, $44, $38 ; 0CA8 .byte $04, $04, $04, $04, $FC, $44, $44, $7F ; 0CB0 .byte $10, $28, $28, $28, $28, $28, $10, $EF ; 0CB8 .byte $00, $00, $00, $08, $14, $14, $08, $F6 ; 0CC0 L0CC8: .byte $FF, $C3, $A5, $99, $99, $A5, $C3, $FF ; 0CC8 L0CD0: .byte $0B, $30, $19, $8A, $DF, $5E, $99, $00 ; 0CD0 .byte $4D, $59, $D9, $CD, $56, $8E ; 0CD8 L0CDE: .byte $1B, $10, $82, $50, $27, $82, $25, $0D ; 0CDE .byte $C1, $3D, $10, $C1, $36, $1B, $C1, $2F ; 0CE6 .byte $25, $C1, $47, $28, $C1, $17, $0B, $C0 ; 0CEE .byte $54, $2A, $40 ; 0CF6 L0CF9: .byte $00, $20, $F8, $70, $00, $00, $50, $20 ; 0CF9 .byte $50, $00, $20, $70, $D8, $70, $20 ; 0D01 L0D08: .byte $09, $16, $1D, $5D, $5A, $4A, $4C, $4E ; 0D08 .byte $00, $61, $4A, $5C ; 0D10 L0D14: .byte $0D, $10, $13, $00, $42, $43, $00, $00 ; 0D14 .byte $00, $47, $42, $00, $00, $00, $41, $43 ; 0D1C .byte $0D, $16, $13, $E9, $44, $42, $00, $00 ; 0D24 .byte $EA, $41, $43, $00, $00, $E2, $00, $43 ; 0D2C .byte $0D, $1E, $13, $00, $46, $45, $00, $00 ; 0D34 .byte $00, $45, $49, $00, $00, $00, $43, $49 ; 0D3C L0D44: .byte $2E, $2B, $81, $28, $2C, $43, $35, $2C ; 0D44 .byte $46, $3B, $2C, $49, $35, $24, $42, $3B ; 0D4C .byte $24, $43 ; 0D54 L0D56: .byte $08, $09, $20, $97, $8A, $9E, $91, $9B ; 0D56 .byte $9F, $92, $A4 ; 0D5E L0D61: .byte $03, $27, $14, $40, $40, $40, $01, $2D ; 0D61 .byte $14, $6A, $02, $33, $33, $42, $40, $06 ; 0D69 .byte $11, $27, $CB, $CA, $D0, $CE, $D6, $DD ; 0D71 L0D79: .byte $14, $19, $80, $1A, $19, $80, $30, $19 ; 0D79 .byte $40, $36, $19, $40, $4D, $19, $40, $53 ; 0D81 .byte $19, $40 ; 0D89 L0D8B: .byte $FE, $FE, $FE, $FE, $FE, $FE, $FE, $00 ; 0D8B L0D93: .byte $03, $11, $2E, $98, $92, $97 ; 0D93 L0D99: .byte $D8, $D8, $D8, $D8, $D8, $00, $70, $00 ; 0D99 .byte $70, $00, $00, $F0, $00, $7F, $00 ; 0DA1 L0DA8: .byte $18, $1A, $80, $34, $1A, $40, $51, $1A ; 0DA8 .byte $40 ; 0DB0 L0DB1: .byte $10, $10, $80, $10, $23, $40 ; 0DB1 L0DB7: .byte $09, $08, $17, $CD, $DC, $CA, $D0, $00 ; 0DB7 .byte $DC, $CA, $CC, $CE ; 0DBF L0DC3: .byte $C0, $80, $40, $C0, $80, $40 ; 0DC3 L0DC9: .byte $F0, $F0, $F0, $F0, $00 ; 0DC9 L0DCE: .byte $FF, $FF, $00, $00, $00, $00, $00, $00 ; 0DCE L0DD6: .byte $45, $45, $45, $49, $C5, $4C, $54, $C5 ; 0DD6 .byte $C7, $63, $DD, $D7, $5D, $D1, $DD, $46 ; 0DDE .byte $D4, $64, $67, $61, $DD, $DD, $DD, $D1 ; 0DE6 .byte $87, $57, $CC, $5D, $D7, $6D, $86, $76 ; 0DEE .byte $D4, $6C, $CC, $67, $61, $4B, $64, $92 ; 0DF6 .byte $76, $0C, $C5, $14, $CB, $60, $C6, $75 ; 0DFE .byte $05, $4C, $CB, $6D, $42, $54, $54, $5D ; 0E06 .byte $46, $75, $4C, $C6, $D4, $76, $76, $7B ; 0E0E .byte $8C, $C6, $A4, $54, $67, $54, $54, $51 ; 0E16 .byte $7C, $C2, $76, $7B, $CC, $B6, $76, $76 ; 0E1E L0E26: .byte $FE, $FE, $C0, $C0, $FE, $FE, $00, $00 ; 0E26 .byte $FE, $FE, $C6, $C6, $C6, $C6, $00, $00 ; 0E2E .byte $FE, $FE, $06, $06, $FE, $FE, $00, $00 ; 0E36 .byte $C6, $C6, $C6, $C6, $FE, $FE, $00, $00 ; 0E3E .byte $FE, $FE, $C0, $C0, $C6, $C6, $00, $00 ; 0E46 .byte $FE, $FE, $06, $06, $C6, $C6, $00, $00 ; 0E4E .byte $C6, $C6, $06, $06, $FE, $FE, $00, $00 ; 0E56 .byte $C6, $C6, $C0, $C0, $FE, $FE, $00, $00 ; 0E5E .byte $C6, $C6, $C0, $C0, $C6, $C6, $00, $00 ; 0E66 .byte $FE, $FE, $00, $00, $C6, $C6, $00, $00 ; 0E6E .byte $C6, $C6, $06, $06, $C6, $C6, $00, $00 ; 0E76 .byte $C6, $C6, $00, $00, $FE, $FE, $00, $00 ; 0E7E .byte $FE, $FE, $00, $00, $FE, $FE, $00, $00 ; 0E86 .byte $C6, $C6, $C6, $C6, $C6, $C6, $00, $00 ; 0E8E L0E96: .byte $04, $33, $2B, $57, $4A, $64, $4E ; 0E96 L0E9D: .byte $15, $1A, $40, $18, $0D, $40, $35, $0A ; 0E9D .byte $40, $50, $0D, $40, $12, $22, $41, $37 ; 0EA5 .byte $14, $41, $58, $22, $41, $37, $1D, $42 ; 0EAD .byte $35, $36, $43, $34, $31, $84, $36, $30 ; 0EB5 .byte $45, $2F, $30, $C6 ; 0EBD L0EC1: .byte $10, $38, $38, $28, $28, $10, $38, $38 ; 0EC1 .byte $28, $E8, $A0, $F0, $70, $50, $50, $20 ; 0EC9 .byte $70, $70, $D8, $00, $80, $80, $80, $80 ; 0ED1 .byte $80, $E0, $E0, $00, $00, $00, $20, $78 ; 0ED9 .byte $70, $50, $50 ; 0EE1 L0EE4: .byte $08, $25, $20, $8B, $8A, $9D, $8E, $8B ; 0EE4 .byte $8A, $96, $96 ; 0EEC L0EEF: .byte $F8, $88, $88, $88, $F8, $20, $60, $20 ; 0EEF .byte $20, $70, $F8, $08, $F8, $80, $F8, $F8 ; 0EF7 .byte $08, $38, $08, $F8, $88, $88, $F8, $08 ; 0EFF .byte $08, $F8, $80, $F8, $08, $F8, $80, $80 ; 0F07 .byte $F8, $88, $F8, $F8, $08, $10, $10, $10 ; 0F0F .byte $F8, $88, $F8, $88, $F8, $F8, $88, $F8 ; 0F17 .byte $08, $08, $F8, $88, $F8, $88, $88, $F8 ; 0F1F .byte $48, $78, $48, $F8, $F8, $80, $80, $80 ; 0F27 .byte $F8, $F8, $48, $48, $48, $F8, $F8, $80 ; 0F2F .byte $E0, $80, $F8, $F8, $80, $E0, $80, $80 ; 0F37 .byte $F8, $80, $98, $88, $F8, $88, $88, $F8 ; 0F3F .byte $88, $88, $F8, $20, $20, $20, $F8, $F8 ; 0F47 .byte $20, $20, $A0, $E0, $90, $A0, $C0, $A0 ; 0F4F .byte $90 ; 0F57 L0F58: .byte $00, $C8, $FF, $C8, $00, $80, $80, $80 ; 0F58 .byte $80, $F8, $88, $D8, $A8, $88, $88, $88 ; 0F60 .byte $C8, $A8, $98, $88, $F8, $88, $88, $88 ; 0F68 .byte $F8, $F8, $88, $F8, $80, $80, $F8, $88 ; 0F70 .byte $88, $90, $E8, $F8, $88, $F8, $90, $88 ; 0F78 .byte $F8, $80, $F8, $08, $F8, $F8, $20, $20 ; 0F80 .byte $20, $20, $88, $88, $88, $88, $F8, $88 ; 0F88 .byte $88, $88, $50, $20, $88, $88, $A8, $D8 ; 0F90 .byte $88, $88, $50, $20, $50, $88, $88, $88 ; 0F98 .byte $F8, $20, $20, $F8, $10, $20, $40, $F8 ; 0FA0 .byte $00, $00, $00, $00, $00, $F8, $08, $38 ; 0FA8 .byte $00, $20, $00, $00, $00, $00, $40, $20 ; 0FB0 .byte $20, $20, $00, $20, $20, $20, $F8, $20 ; 0FB8 .byte $20, $00, $00, $F8, $00, $00 ; 0FC0 ; ----------------------------------------------------------------------------- ; lr A,KU ; 0fc5 00 ; bios_draw_a01fc_wrapper ; Wrapper for BIOS routine $01FC. Used for a repeated object/sprite style draw. ; ----------------------------------------------------------------------------- bios_draw_a01fc_wrapper: lr K,P ; 0FC6 08 pi pushk ; 0FC7 28 01 07 - bios pushk - save return address on BIOS K-stack jmp $01FC ; 0FCA 29 01 FC - unconditional jump ; ----------------------------------------------------------------------------- ; b_drawchar_bmp_wrapper ; Wrapper for BIOS drawchar bitmap entry. Sets r4=8 before tail-jumping into ; BIOS drawchar internals. ; ----------------------------------------------------------------------------- b_drawchar_bmp_wrapper: lr K,P ; 0FCD 08 pi pushk ; 0FCE 28 01 07 - bios pushk - save return address on BIOS K-stack lis 8 ; 0FD1 78 lr 4,A ; 0FD2 54 jmp b_drawchar_bmp_entry ; 0FD3 29 06 8A - unconditional jump ; ----------------------------------------------------------------------------- ; bios_score_prompt_wrapper ; Wrapper around BIOS score/prompt rendering helper. Initializes object bytes ; at O26/O27 before BIOS calls. ; ----------------------------------------------------------------------------- bios_score_prompt_wrapper: lr K,P ; 0FD6 08 pi pushk ; 0FD7 28 01 07 - bios pushk - save return address on BIOS K-stack lisu 2 ; 0FDA 62 lisl 6 ; 0FDB 6E li $99 ; 0FDC 20 99 lr I,A ; 0FDE 5D - store A and increment ISAR lr S,A ; 0FDF 5C - store A in selected scratchpad register pi b_score_left ; 0FE0 28 02 AC pi b_score_right ; 0FE3 28 02 B5 pi popk ; 0FE6 28 01 1E - restore return address from BIOS K-stack pk ; 0FE9 0C - return via K/P after BIOS K-stack restore ; ----------------------------------------------------------------------------- ; clear_screen_o37_0 ; Clear-screen wrapper variant. Stores 0 in O37 before calling BIOS clearscrn. ; ----------------------------------------------------------------------------- clear_screen_o37_0: clr ; 0FEA 70 br clear_screen_common ; 0FEB 90 02 - unconditional jump ; ----------------------------------------------------------------------------- ; clear_screen_o37_1 ; Clear-screen wrapper variant. Stores 1 in O37 before calling BIOS clearscrn. ; ----------------------------------------------------------------------------- clear_screen_o37_1: lis 1 ; 0FED 71 ; ----------------------------------------------------------------------------- ; clear_screen_common ; Common clear-screen helper. Stores O37, builds r3=$D0+r3, then calls BIOS ; clearscrn. ; ----------------------------------------------------------------------------- clear_screen_common: lisu 3 ; 0FEE 63 lisl 7 ; 0FEF 6F lr S,A ; 0FF0 5C - store A in selected scratchpad register lr K,P ; 0FF1 08 pi pushk ; 0FF2 28 01 07 - bios pushk - save return address on BIOS K-stack li $D0 ; 0FF5 20 D0 as 3 ; 0FF7 C3 lr 3,A ; 0FF8 53 pi clrscrn ; 0FF9 28 00 D0 - bios clear screen routine pi popk ; 0FFC 28 01 1E - restore return address from BIOS K-stack pk ; 0FFF 0C - return via K/P after BIOS K-stack restore IF 0 ; Smart data report ; ================= ; Mode: enabled by -s or /s ; Memory range: $0800-$0FFF ; Code bytes: 1070 ; Data bytes: 978 ; ; DCI data roots from reachable code: ; $0BC6 from $0809 ; $0BCF from $0816 ; $0BD8 from $0845 ; $0BE6 from $086B ; $0C98 from $0878 ; $0CC8 from $0899 ; $0CC8 from $08A8 ; $0CC8 from $08B7 ; $0CC8 from $08C3 ; $0CD0 from $08C9 ; $0C00 from $08FD ; $0C1B from $0907 ; $0BF9 from $0914 ; $0EEF from $0BB0 ; $0E9D from $0B57 ; $0EC1 from $0B63 ; $0EE4 from $0B6D ; $0C76 from $099D ; $0C34 from $09B3 ; $0C67 from $09B7 ; $0C5C from $09CA ; $0CDE from $09DA ; $0CF9 from $09E4 ; $0D08 from $09EE ; $0D14 from $0A18 ; $0D44 from $0A32 ; $0D56 from $0A43 ; $0D61 from $0A53 ; $0D79 from $0A6F ; $0D8B from $0A7B ; $0D99 from $0A85 ; $0DA8 from $0A89 ; $0D93 from $0A9C ; $0DB1 from $0AA7 ; $0F58 from $0AB3 ; $0DC3 from $0AD8 ; $0DC9 from $0AE0 ; $0DCE from $0AF5 ; $0DCE from $0B01 ; $0DB7 from $0B0A ; $0DD6 from $0B15 ; $0E26 from $0B2A ; $0E26 from $0B33 ; $0E96 from $0B4C ; ; Data intervals emitted as .byte: ; $0BF4-$0FC5 (978 bytes) ENDIF