Disassembly:Videocart 24
From veswiki
This is the complete disassembly of the Channel F Videocart 24 made with e5frog's modified f8tool made by Peter Trauner's. Original code is copyright © 1978 (?) Zircon International.
;=============================================================================== ; VIDEOCART 24 / PRO FOOTBALL ; Commented disassembly ; ; Original binary copyright Zircon International, approximately 1978. ; Original disassembly generated with f8tool and reconstructed as compilable ; DASM/F8 source. This revision preserves all instructions, labels, data bytes, ; addresses and original address comments. Only explanatory comments and ; section headings have been added. ; ; Confidence terminology used below: ; confirmed directly established by I/O, data flow or control flow ; strongly likely supported by several independent code relationships ; preliminary descriptive working name, not an original symbol ; ; The range $124D-$17FF is emitted as data because reachable code addresses it ; through DC0. Routines and tables are described without changing binary data. ;=============================================================================== processor f8 org $0800 clrscrn equ $00D0 lr 5, A ; 0800 55 nop ; 0801 2B li $D0 ; 0802 20 D0 lr 3, A ; 0804 53 pi clrscrn ; 0805 28 00 D0 lisu 6 ; 0808 66 lisl 1 ; 0809 69 li $21 ; 080A 20 21 lr S, A ; 080C 5C lis 1 ; 080D 71 lr $A, A ; 080E 5A jmp L0E68 ; 080F 29 0E 68 ;------------------------------------------------------------------------------- ; set_isar_2x_r0_plus_10 (confirmed) ; Convert object index in r0 to the first byte of a two-byte scratchpad entry. ; Output: ISAR = $10 + 2*r0. A and ISAR are changed; r0 is preserved. ;------------------------------------------------------------------------------- L0812: li $10 ; 0812 20 10 as 0 ; 0814 C0 as 0 ; 0815 C0 lr IS, A ; 0816 0B pop ; 0817 1C ;------------------------------------------------------------------------------- ; delay_r5 (confirmed) ; Blocking two-level delay. A wraps through 256 INC operations for each r5 ; count. r5 is consumed and returns as zero. ;------------------------------------------------------------------------------- L0818: clr ; 0818 70 L0819: inc ; 0819 1F bnz L0819 ; 081A 94 FE ds 5 ; 081C 35 bnz L0818 ; 081D 94 FA pop ; 081F 1C ;------------------------------------------------------------------------------- ; Graphics parameter entry points (strongly likely) ; L0820 reads r3, then L0822 reads r4, r2, r5 and r6 from DC0 before entering ; the common renderer. Observed use identifies r3/r4 as coordinates, r2 as ; color/mode, and r5/r6 as width/height counters. ;------------------------------------------------------------------------------- L0820: lm ; 0820 16 lr 3, A ; 0821 53 L0822: lm ; 0822 16 lr 4, A ; 0823 54 lm ; 0824 16 lr 2, A ; 0825 52 lm ; 0826 16 lr 5, A ; 0827 55 lm ; 0828 16 lr 6, A ; 0829 56 br L084A ; 082A 90 1F ; draw_object_from_scratch: select solid/background mode, then read X/Y pair. L082C: li $C1 ; 082C 20 C1 lr 2, A ; 082E 52 ; Read a two-byte coordinate pair through ISAR with post-increment semantics. L082F: lr A, I ; 082F 4D lr 3, A ; 0830 53 ds 3 ; 0831 33 lr A, I ; 0832 4D lr 4, A ; 0833 54 ds 4 ; 0834 34 br L083A ; 0835 90 04 .byte $20, $C1, $52 ; 0837 L083A: lis 3 ; 083A 73 lr 5, A ; 083B 55 ; Short fixed-height graphics entry: use three rows. L083C: lis 3 ; 083C 73 lr 6, A ; 083D 56 br L084A ; 083E 90 0B ; draw_bitmap_entry (confirmed graphics): select a two-byte glyph/sprite entry ; at L1364 + 2*r1 and use fixed dimensions 3 by 5. L0840: dci L1364 ; 0840 2A 13 64 lr A, 1 ; 0843 41 adc ; 0844 8E adc ; 0845 8E lis 3 ; 0846 73 lr 5, A ; 0847 55 lis 5 ; 0848 75 lr 6, A ; 0849 56 ;------------------------------------------------------------------------------- ; draw_bitmap_core (confirmed) ; Port 0: graphics write/strobe. Port 1: color. Port 4: inverted X. ; Port 5: inverted Y in low six bits and sound selection in high two bits. ; r7 is the serial bitmap mask; a new byte is fetched with LM when exhausted. ; r1 and r6 count columns and rows. Port 0 is cleared before return. ;------------------------------------------------------------------------------- L084A: clr ; 084A 70 lr 7, A ; 084B 57 li $40 ; 084C 20 40 outs 0 ; 084E B0 lr A, 4 ; 084F 44 oi $C0 ; 0850 22 C0 com ; 0852 18 outs 5 ; 0853 B5 L0854: lr A, 3 ; 0854 43 com ; 0855 18 outs 4 ; 0856 B4 lr A, 5 ; 0857 45 lr 1, A ; 0858 51 L0859: lr A, 2 ; 0859 42 outs 1 ; 085A B1 ni 1 ; 085B 21 01 bnz L0873 ; 085D 94 15 com ; 085F 18 adc ; 0860 8E lr A, 7 ; 0861 47 sr 1 ; 0862 12 lr 7, A ; 0863 57 bnz L086A ; 0864 94 05 lm ; 0866 16 li $80 ; 0867 20 80 lr 7, A ; 0869 57 L086A: nm ; 086A 8A bnz L0873 ; 086B 94 07 com ; 086D 18 outs 1 ; 086E B1 lis 2 ; 086F 72 ns 2 ; 0870 F2 bnz L087D ; 0871 94 0B L0873: li $60 ; 0873 20 60 outs 0 ; 0875 B0 li $40 ; 0876 20 40 outs 0 ; 0878 B0 L0879: ai $F5 ; 0879 24 F5 bp L0879 ; 087B 81 FD L087D: ins 4 ; 087D A4 ai $FF ; 087E 24 FF outs 4 ; 0880 B4 ds 1 ; 0881 31 bnz L0859 ; 0882 94 D6 ins 5 ; 0884 A5 ai $FF ; 0885 24 FF outs 5 ; 0887 B5 ds 6 ; 0888 36 bnz L0854 ; 0889 94 CA clr ; 088B 70 outs 0 ; 088C B0 pop ; 088D 1C ;------------------------------------------------------------------------------- ; play_sound_table (confirmed) ; DC0 points to pairs: repetition/group count followed by delay value. A zero ; count terminates. The routine alternates $80 (500 Hz) and $00 on port 5; ; r5 controls both on-time and off-time, while r4/r7 group the pulses. ;------------------------------------------------------------------------------- L088E: lis 3 ; 088E 73 lr 4, A ; 088F 54 L0890: inc ; 0890 1F bnz L0890 ; 0891 94 FE am ; 0893 88 lr 7, A ; 0894 57 bz L08AF ; 0895 84 19 lm ; 0897 16 lr 5, A ; 0898 55 L0899: li $80 ; 0899 20 80 outs 5 ; 089B B5 lr A, 5 ; 089C 45 L089D: inc ; 089D 1F bnz L089D ; 089E 94 FE outs 5 ; 08A0 B5 lr A, 5 ; 08A1 45 L08A2: inc ; 08A2 1F bnz L08A2 ; 08A3 94 FE ds 4 ; 08A5 34 bnz L0899 ; 08A6 94 F2 lis 3 ; 08A8 73 lr 4, A ; 08A9 54 ds 7 ; 08AA 37 bnz L0899 ; 08AB 94 ED br L088E ; 08AD 90 E0 L08AF: pop ; 08AF 1C ;------------------------------------------------------------------------------- ; read_controller_a / read_controller_b (strongly likely) ; Select one of two controller I/O paths according to r10 bit 0. The selected ; input is inverted and stored in O73. L08C1 selects the opposite input path. ;------------------------------------------------------------------------------- L08B0: lis 1 ; 08B0 71 ns $A ; 08B1 FA bz L08B9 ; 08B2 84 06 L08B4: clr ; 08B4 70 outs 4 ; 08B5 B4 ins 4 ; 08B6 A4 br L08BC ; 08B7 90 04 L08B9: clr ; 08B9 70 outs 1 ; 08BA B1 ins 1 ; 08BB A1 L08BC: com ; 08BC 18 lisu 7 ; 08BD 67 lisl 3 ; 08BE 6B lr S, A ; 08BF 5C pop ; 08C0 1C L08C1: lis 1 ; 08C1 71 ns $A ; 08C2 FA bz L08B4 ; 08C3 84 F0 br L08B9 ; 08C5 90 F3 ;------------------------------------------------------------------------------- ; lookup_table_1268 (confirmed table lookup) ; Index table L1268 from scratchpad state and accumulate variable-length data. ;------------------------------------------------------------------------------- L08C7: dci L1268 ; 08C7 2A 12 68 lisu 7 ; 08CA 67 lisl 6 ; 08CB 6E lr A, D ; 08CC 4E adc ; 08CD 8E lm ; 08CE 16 adc ; 08CF 8E lr A, S ; 08D0 4C com ; 08D1 18 inc ; 08D2 1F lr 4, A ; 08D3 54 L08D4: lm ; 08D4 16 as 4 ; 08D5 C4 lm ; 08D6 16 bm L08D4 ; 08D7 91 FC pop ; 08D9 1C ; lookup_table_1297 (confirmed table lookup) ; Parallel lookup using L1297, with a three-byte accumulation stride. L08DA: dci L1297 ; 08DA 2A 12 97 lisu 7 ; 08DD 67 lisl 6 ; 08DE 6E lr A, D ; 08DF 4E adc ; 08E0 8E lm ; 08E1 16 adc ; 08E2 8E lr A, S ; 08E3 4C com ; 08E4 18 inc ; 08E5 1F lr 4, A ; 08E6 54 L08E7: lm ; 08E7 16 lm ; 08E8 16 as 4 ; 08E9 C4 lm ; 08EA 16 bm L08E7 ; 08EB 91 FB pop ; 08ED 1C ;------------------------------------------------------------------------------- ; calc_small_index_a (preliminary) ; Return a small class in r5 according to r0 and player/side flag r10 bit 0. ;------------------------------------------------------------------------------- L08EE: lis 2 ; 08EE 72 lr 5, A ; 08EF 55 lr A, 0 ; 08F0 40 ci 6 ; 08F1 25 06 bm L08F6 ; 08F3 91 02 ds 5 ; 08F5 35 L08F6: lis 1 ; 08F6 71 ns $A ; 08F7 FA bz L08FB ; 08F8 84 02 ds 5 ; 08FA 35 L08FB: ds 5 ; 08FB 35 pop ; 08FC 1C ; calc_small_index_b (preliminary) ; Return a small class in r5 from the relation between r0 and r4. L08FD: lis 2 ; 08FD 72 lr 5, A ; 08FE 55 li $F9 ; 08FF 20 F9 as 0 ; 0901 C0 bm L0905 ; 0902 91 02 ds 5 ; 0904 35 L0905: li $F9 ; 0905 20 F9 as 4 ; 0907 C4 bm L090B ; 0908 91 02 ds 5 ; 090A 35 L090B: ds 5 ; 090B 35 pop ; 090C 1C ;------------------------------------------------------------------------------- ; update_motion_or_collision_vector (strongly likely) ; Compare object coordinate pairs stored at $10 + 2*index. The block computes ; absolute differences, applies side/direction flags, and records an event in ; r11 bit 1 when the tested geometric condition is met. ;------------------------------------------------------------------------------- L090D: lisu 6 ; 090D 66 lisl 5 ; 090E 6D li $64 ; 090F 20 64 lr I, A ; 0911 5D lr A, 9 ; 0912 49 lr S, A ; 0913 5C lisl 4 ; 0914 6C lr A, 4 ; 0915 44 lr S, A ; 0916 5C lis 6 ; 0917 76 lr 9, A ; 0918 59 L0919: li $10 ; 0919 20 10 as 8 ; 091B C8 as 8 ; 091C C8 lr IS, A ; 091D 0B lr A, S ; 091E 4C lr 7, A ; 091F 57 li $FE ; 0920 20 FE lr 5, A ; 0922 55 li $10 ; 0923 20 10 as 9 ; 0925 C9 as 9 ; 0926 C9 lr IS, A ; 0927 0B lr A, 7 ; 0928 47 com ; 0929 18 inc ; 092A 1F as S ; 092B CC lr 7, A ; 092C 57 bp L0931 ; 092D 81 03 com ; 092F 18 inc ; 0930 1F L0931: lr 4, A ; 0931 54 lis 1 ; 0932 71 ns $A ; 0933 FA bz L093A ; 0934 84 05 lr A, 7 ; 0936 47 com ; 0937 18 inc ; 0938 1F lr 7, A ; 0939 57 L093A: lr A, 5 ; 093A 45 inc ; 093B 1F inc ; 093C 1F lr 5, A ; 093D 55 lr A, 4 ; 093E 44 ai $FD ; 093F 24 FD lr 4, A ; 0941 54 bp L093A ; 0942 81 F7 lisu 6 ; 0944 66 lisl 7 ; 0945 6F lis 8 ; 0946 78 ns S ; 0947 FC bz L094E ; 0948 84 05 lr A, 5 ; 094A 45 com ; 094B 18 inc ; 094C 1F lr 5, A ; 094D 55 L094E: lis $C ; 094E 7C ns S ; 094F FC bnz L0953 ; 0950 94 02 lr 5, A ; 0952 55 L0953: lis 1 ; 0953 71 ns $A ; 0954 FA bnz L095B ; 0955 94 05 lr A, 5 ; 0957 45 com ; 0958 18 inc ; 0959 1F lr 5, A ; 095A 55 L095B: clr ; 095B 70 as 7 ; 095C C7 bm L0963 ; 095D 91 05 lr A, 5 ; 095F 45 com ; 0960 18 inc ; 0961 1F lr 5, A ; 0962 55 L0963: li $11 ; 0963 20 11 as 8 ; 0965 C8 as 8 ; 0966 C8 lr IS, A ; 0967 0B lr A, S ; 0968 4C as 5 ; 0969 C5 com ; 096A 18 inc ; 096B 1F lr 5, A ; 096C 55 li $11 ; 096D 20 11 as 9 ; 096F C9 as 9 ; 0970 C9 lr IS, A ; 0971 0B lr A, S ; 0972 4C as 5 ; 0973 C5 bp L0978 ; 0974 81 03 com ; 0976 18 inc ; 0977 1F L0978: lr 5, A ; 0978 55 com ; 0979 18 lisu 6 ; 097A 66 lisl 5 ; 097B 6D as S ; 097C CC bm L09B3 ; 097D 91 35 lr A, 5 ; 097F 45 lr S, A ; 0980 5C clr ; 0981 70 as 7 ; 0982 C7 bp L09AF ; 0983 81 2B lr A, $B ; 0985 4B ni $FD ; 0986 21 FD lr $B, A ; 0988 5B li $10 ; 0989 20 10 as 8 ; 098B C8 as 8 ; 098C C8 lr IS, A ; 098D 0B lr A, S ; 098E 4C sr 1 ; 098F 12 as S ; 0990 CC lr 5, A ; 0991 55 lisu 2 ; 0992 62 lisl 6 ; 0993 6E lr A, S ; 0994 4C sr 1 ; 0995 12 com ; 0996 18 inc ; 0997 1F as 5 ; 0998 C5 lr 5, A ; 0999 55 li $10 ; 099A 20 10 as 9 ; 099C C9 as 9 ; 099D C9 lr IS, A ; 099E 0B lr A, S ; 099F 4C com ; 09A0 18 inc ; 09A1 1F as 5 ; 09A2 C5 lr 5, A ; 09A3 55 lis 1 ; 09A4 71 ns $A ; 09A5 FA bz L09AC ; 09A6 84 05 lr A, 5 ; 09A8 45 com ; 09A9 18 inc ; 09AA 1F lr 5, A ; 09AB 55 L09AC: ds 5 ; 09AC 35 bp L09B3 ; 09AD 81 05 L09AF: lr A, $B ; 09AF 4B oi 2 ; 09B0 22 02 lr $B, A ; 09B2 5B L09B3: ds 9 ; 09B3 39 lr A, 9 ; 09B4 49 ci 3 ; 09B5 25 03 bp L09BC ; 09B7 81 04 jmp L0919 ; 09B9 29 09 19 L09BC: lisu 6 ; 09BC 66 lisl 6 ; 09BD 6E lr A, S ; 09BE 4C lr 9, A ; 09BF 59 lisl 4 ; 09C0 6C lr A, S ; 09C1 4C lr 4, A ; 09C2 54 pop ; 09C3 1C ;------------------------------------------------------------------------------- ; draw_player_or_marker (strongly likely) ; Save the nested return in K, derive a screen position from O61/O62, and draw ; four component glyphs through L0840. Return through PK. ;------------------------------------------------------------------------------- L09C4: lr K, P ; 09C4 08 lisu 6 ; 09C5 66 lisl 1 ; 09C6 69 lr A, I ; 09C7 4D ci $32 ; 09C8 25 32 li $3C ; 09CA 20 3C bp L09D0 ; 09CC 81 03 li $19 ; 09CE 20 19 L09D0: lr 3, A ; 09D0 53 clr ; 09D1 70 lr 1, A ; 09D2 51 as S ; 09D3 CC lr 8, A ; 09D4 58 bz L09E4 ; 09D5 84 0E L09D7: lr A, 8 ; 09D7 48 ai $C4 ; 09D8 24 C4 ci $C3 ; 09DA 25 C3 bnc L09E4 ; 09DC 92 07 lr 8, A ; 09DE 58 lr A, 1 ; 09DF 41 inc ; 09E0 1F lr 1, A ; 09E1 51 br L09D7 ; 09E2 90 F4 L09E4: lis 7 ; 09E4 77 lr 4, A ; 09E5 54 li $40 ; 09E6 20 40 lr 2, A ; 09E8 52 pi L0840 ; 09E9 28 08 40 lis 4 ; 09EC 74 as 3 ; 09ED C3 lr 3, A ; 09EE 53 lis $A ; 09EF 7A lr 1, A ; 09F0 51 pi L0840 ; 09F1 28 08 40 lis 3 ; 09F4 73 as 3 ; 09F5 C3 lr 3, A ; 09F6 53 clr ; 09F7 70 L09F8: lr 1, A ; 09F8 51 lr A, 8 ; 09F9 48 ai $F6 ; 09FA 24 F6 bm L0A04 ; 09FC 91 07 lr 8, A ; 09FE 58 lr A, 1 ; 09FF 41 inc ; 0A00 1F lr 1, A ; 0A01 51 br L09F8 ; 0A02 90 F5 L0A04: pi L0840 ; 0A04 28 08 40 lis 4 ; 0A07 74 as 3 ; 0A08 C3 lr 3, A ; 0A09 53 lr A, 8 ; 0A0A 48 lr 1, A ; 0A0B 51 pi L0840 ; 0A0C 28 08 40 pk ; 0A0F 0C ;------------------------------------------------------------------------------- ; normalize_control_bits (strongly likely) ; Copy direction bits from r7 to r4 and mirror selected bits for the active side. ;------------------------------------------------------------------------------- L0A10: lr A, 7 ; 0A10 47 lr 4, A ; 0A11 54 lis 1 ; 0A12 71 ns $A ; 0A13 FA bnz L0A1D ; 0A14 94 08 lis 3 ; 0A16 73 ns 4 ; 0A17 F4 bz L0A1D ; 0A18 84 04 lis 3 ; 0A1A 73 xs 4 ; 0A1B E4 lr 4, A ; 0A1C 54 L0A1D: br L0A24 ; 0A1D 90 06 ; read_control_nibble (strongly likely): load low four bits of O73 into r4. L0A1F: lisu 7 ; 0A1F 67 lisl 3 ; 0A20 6B lis $F ; 0A21 7F ns S ; 0A22 FC lr 4, A ; 0A23 54 ;------------------------------------------------------------------------------- ; apply_direction_and_move (strongly likely) ; Decode r4 bits 0-3 into signed horizontal and vertical steps in r3/r6, then ; apply object-, side- and boundary-specific movement rules. ;------------------------------------------------------------------------------- L0A24: lr K, P ; 0A24 08 clr ; 0A25 70 lr 3, A ; 0A26 53 lr 6, A ; 0A27 56 lis 1 ; 0A28 71 ns 4 ; 0A29 F4 bz L0A2E ; 0A2A 84 03 lis 1 ; 0A2C 71 lr 3, A ; 0A2D 53 L0A2E: lis 2 ; 0A2E 72 ns 4 ; 0A2F F4 bz L0A33 ; 0A30 84 02 ds 3 ; 0A32 33 L0A33: nop ; 0A33 2B lis 4 ; 0A34 74 ns 4 ; 0A35 F4 bz L0A3A ; 0A36 84 03 lis 1 ; 0A38 71 lr 6, A ; 0A39 56 L0A3A: lis 8 ; 0A3A 78 ns 4 ; 0A3B F4 bz L0A3F ; 0A3C 84 02 ds 6 ; 0A3E 36 L0A3F: clr ; 0A3F 70 as 0 ; 0A40 C0 bnz L0A61 ; 0A41 94 1F lr A, 6 ; 0A43 46 sl 1 ; 0A44 13 lr 6, A ; 0A45 56 lr A, 3 ; 0A46 43 bz L0A4D ; 0A47 84 05 sl 1 ; 0A49 13 sl 1 ; 0A4A 13 br L0A4F ; 0A4B 90 03 L0A4D: sl 1 ; 0A4D 13 as 3 ; 0A4E C3 L0A4F: lr 3, A ; 0A4F 53 lisu 7 ; 0A50 67 lisl 6 ; 0A51 6E lr A, D ; 0A52 4E ci 6 ; 0A53 25 06 bp L0A73 ; 0A55 81 1D lis 1 ; 0A57 71 ns S ; 0A58 FC bnz L0A5D ; 0A59 94 03 li $FF ; 0A5B 20 FF L0A5D: as 6 ; 0A5D C6 lr 6, A ; 0A5E 56 br L0A73 ; 0A5F 90 13 L0A61: lisu 7 ; 0A61 67 lisl 6 ; 0A62 6E lis 7 ; 0A63 77 xs S ; 0A64 EC bnz L0A73 ; 0A65 94 0D lis 3 ; 0A67 73 xs 9 ; 0A68 E9 bnz L0A73 ; 0A69 94 09 lr A, 0 ; 0A6B 40 ci 6 ; 0A6C 25 06 bm L0A73 ; 0A6E 91 04 clr ; 0A70 70 lr 3, A ; 0A71 53 lr 6, A ; 0A72 56 L0A73: lis 2 ; 0A73 72 ns $A ; 0A74 FA bnz L0A9A ; 0A75 94 24 lr A, 0 ; 0A77 40 ci 6 ; 0A78 25 06 bp L0A9A ; 0A7A 81 1F ci $C ; 0A7C 25 0C bm L0A9A ; 0A7E 91 1B lis 3 ; 0A80 73 xs 9 ; 0A81 E9 bnz L0A89 ; 0A82 94 06 li $20 ; 0A84 20 20 ns $A ; 0A86 FA bz L0A9A ; 0A87 84 12 L0A89: lisl 4 ; 0A89 6C lr A, S ; 0A8A 4C sl 4 ; 0A8B 15 sl 1 ; 0A8C 13 as S ; 0A8D CC ai $73 ; 0A8E 24 73 lr S, A ; 0A90 5C lr A, S ; 0A91 4C sr 4 ; 0A92 14 sr 1 ; 0A93 12 sr 1 ; 0A94 12 bnz L0A9A ; 0A95 94 04 lr A, 3 ; 0A97 43 sl 1 ; 0A98 13 lr 3, A ; 0A99 53 ;------------------------------------------------------------------------------- ; Central object/collision pass (strongly likely) ; Iterate two-byte object records, test position limits and collisions, and set ; event bits in r11. O53/O54 hold a temporary coordinate pair. ;------------------------------------------------------------------------------- L0A9A: clr ; 0A9A 70 lr $B, A ; 0A9B 5B L0A9C: pi L0812 ; 0A9C 28 08 12 lr A, I ; 0A9F 4D as 3 ; 0AA0 C3 lr 1, A ; 0AA1 51 lr A, S ; 0AA2 4C as 6 ; 0AA3 C6 lisu 5 ; 0AA4 65 lisl 3 ; 0AA5 6B lr 2, A ; 0AA6 52 lr D, A ; 0AA7 5E lr A, 1 ; 0AA8 41 lr I, A ; 0AA9 5D lr A, D ; 0AAA 4E ci $F ; 0AAB 25 0F bp L0AB3 ; 0AAD 81 05 ci $35 ; 0AAF 25 35 bp L0AD2 ; 0AB1 81 20 L0AB3: clr ; 0AB3 70 as 0 ; 0AB4 C0 bz L0ACE ; 0AB5 84 18 lisu 5 ; 0AB7 65 lisl 4 ; 0AB8 6C ci 5 ; 0AB9 25 05 bnz L0AC2 ; 0ABB 94 06 lis $C ; 0ABD 7C xs S ; 0ABE EC lr S, A ; 0ABF 5C br L0ACA ; 0AC0 90 09 L0AC2: ci 6 ; 0AC2 25 06 bnz L0ACA ; 0AC4 94 05 li $C0 ; 0AC6 20 C0 xs S ; 0AC8 EC lr S, A ; 0AC9 5C L0ACA: clr ; 0ACA 70 lr 6, A ; 0ACB 56 br L0A9C ; 0ACC 90 CF L0ACE: lr A, $B ; 0ACE 4B oi $10 ; 0ACF 22 10 lr $B, A ; 0AD1 5B L0AD2: lr A, 1 ; 0AD2 41 ci $A ; 0AD3 25 0A bp L0ADB ; 0AD5 81 05 ci $5F ; 0AD7 25 5F bp L0AF5 ; 0AD9 81 1B L0ADB: clr ; 0ADB 70 as 0 ; 0ADC C0 bnz L0AE5 ; 0ADD 94 07 lr A, $B ; 0ADF 4B oi $40 ; 0AE0 22 40 lr $B, A ; 0AE2 5B br L0AF5 ; 0AE3 90 11 L0AE5: lr A, 0 ; 0AE5 40 ci 5 ; 0AE6 25 05 lisu 5 ; 0AE8 65 lisl 4 ; 0AE9 6C bnz L0AF1 ; 0AEA 94 06 lis 3 ; 0AEC 73 xs S ; 0AED EC lr S, A ; 0AEE 5C br L0AF1 ; 0AEF 90 01 L0AF1: clr ; 0AF1 70 lr 3, A ; 0AF2 53 br L0A9C ; 0AF3 90 A8 L0AF5: lis 8 ; 0AF5 78 ns $A ; 0AF6 FA lis 1 ; 0AF7 71 bz L0AFB ; 0AF8 84 02 clr ; 0AFA 70 L0AFB: lr 4, A ; 0AFB 54 L0AFC: lr A, 4 ; 0AFC 44 xs 0 ; 0AFD E0 bz L0B0B ; 0AFE 84 0C li $10 ; 0B00 20 10 as 4 ; 0B02 C4 as 4 ; 0B03 C4 lr IS, A ; 0B04 0B lis 2 ; 0B05 72 as I ; 0B06 CD com ; 0B07 18 as 1 ; 0B08 C1 bm L0B0E ; 0B09 91 04 L0B0B: jmp L0BB1 ; 0B0B 29 0B B1 L0B0E: ai 5 ; 0B0E 24 05 bm L0B0B ; 0B10 91 FA lis 2 ; 0B12 72 as I ; 0B13 CD com ; 0B14 18 as 2 ; 0B15 C2 bp L0B0B ; 0B16 81 F4 ai 5 ; 0B18 24 05 bm L0B0B ; 0B1A 91 F0 lr A, 0 ; 0B1C 40 lr 8, A ; 0B1D 58 lr A, 9 ; 0B1E 49 xs 4 ; 0B1F E4 bz L0B28 ; 0B20 84 07 lr A, 4 ; 0B22 44 lr 8, A ; 0B23 58 lr A, 9 ; 0B24 49 xs 0 ; 0B25 E0 bnz L0B8E ; 0B26 94 67 L0B28: clr ; 0B28 70 as 9 ; 0B29 C9 bnz L0B81 ; 0B2A 94 56 lr A, $B ; 0B2C 4B ni $FD ; 0B2D 21 FD lr $B, A ; 0B2F 5B lisu 7 ; 0B30 67 lisl 6 ; 0B31 6E lr A, D ; 0B32 4E ci 6 ; 0B33 25 06 bp L0B55 ; 0B35 81 1F lr A, S ; 0B37 4C com ; 0B38 18 inc ; 0B39 1F lisl 1 ; 0B3A 69 as S ; 0B3B CC bp L0B0B ; 0B3C 81 CE lr A, 8 ; 0B3E 48 ci 6 ; 0B3F 25 06 lr A, $B ; 0B41 4B bm L0B49 ; 0B42 91 06 oi $E ; 0B44 22 0E lr $B, A ; 0B46 5B br L0B4E ; 0B47 90 06 L0B49: oi $A ; 0B49 22 0A lr $B, A ; 0B4B 5B lr A, 8 ; 0B4C 48 lr 9, A ; 0B4D 59 L0B4E: lr A, $A ; 0B4E 4A oi 2 ; 0B4F 22 02 lr $A, A ; 0B51 5A jmp L0BBC ; 0B52 29 0B BC L0B55: lr A, 8 ; 0B55 48 ci 3 ; 0B56 25 03 bp L0B0B ; 0B58 81 B2 ci $A ; 0B5A 25 0A bm L0B0B ; 0B5C 91 AE lr A, $B ; 0B5E 4B oi 2 ; 0B5F 22 02 lr $B, A ; 0B61 5B lr A, 8 ; 0B62 48 ci 6 ; 0B63 25 06 bp L0B6E ; 0B65 81 08 pi L090D ; 0B67 28 09 0D lis 2 ; 0B6A 72 ns $B ; 0B6B FB bz L0BB1 ; 0B6C 84 44 L0B6E: lr A, 8 ; 0B6E 48 lr 9, A ; 0B6F 59 lr A, $B ; 0B70 4B oi 8 ; 0B71 22 08 ni $FE ; 0B73 21 FE lr $B, A ; 0B75 5B lr A, 8 ; 0B76 48 ci 6 ; 0B77 25 06 bp L0B7F ; 0B79 81 05 lr A, $A ; 0B7B 4A oi 2 ; 0B7C 22 02 lr $A, A ; 0B7E 5A L0B7F: br L0BBC ; 0B7F 90 3C L0B81: pi L08FD ; 0B81 28 08 FD bnz L0B8E ; 0B84 94 09 lr A, $B ; 0B86 4B oi 4 ; 0B87 22 04 ni $FE ; 0B89 21 FE lr $B, A ; 0B8B 5B br L0BBC ; 0B8C 90 2F L0B8E: lr A, $B ; 0B8E 4B oi 1 ; 0B8F 22 01 lr $B, A ; 0B91 5B lr A, 3 ; 0B92 43 ci 1 ; 0B93 25 01 bp L0B9A ; 0B95 81 04 lis 1 ; 0B97 71 br L0BA0 ; 0B98 90 07 L0B9A: ci $FE ; 0B9A 25 FE bm L0BA4 ; 0B9C 91 07 li $FF ; 0B9E 20 FF L0BA0: lr 3, A ; 0BA0 53 L0BA1: jmp L0A9A ; 0BA1 29 0A 9A L0BA4: pi L08FD ; 0BA4 28 08 FD bz L0BB1 ; 0BA7 84 09 clr ; 0BA9 70 as 6 ; 0BAA C6 bz L0BBC ; 0BAB 84 10 clr ; 0BAD 70 lr 6, A ; 0BAE 56 br L0BA1 ; 0BAF 90 F1 L0BB1: lr A, 4 ; 0BB1 44 inc ; 0BB2 1F lr 4, A ; 0BB3 54 ci $C ; 0BB4 25 0C bm L0BBC ; 0BB6 91 05 jmp L0AFC ; 0BB8 29 0A FC ;------------------------------------------------------------------------------- ; Scene/state update entry (preliminary) ; Preserve nested return in K, redraw changed objects, update packed state and ; dispatch event sound or phase transitions. ;------------------------------------------------------------------------------- L0BBB: lr K, P ; 0BBB 08 L0BBC: lis 8 ; 0BBC 78 ns $B ; 0BBD FB bz L0BC9 ; 0BBE 84 0A lr A, $A ; 0BC0 4A ni $F7 ; 0BC1 21 F7 lr $A, A ; 0BC3 5A lisu 2 ; 0BC4 62 lisl 0 ; 0BC5 68 pi L082C ; 0BC6 28 08 2C L0BC9: pi L0812 ; 0BC9 28 08 12 pi L082C ; 0BCC 28 08 2C li $58 ; 0BCF 20 58 lr 3, A ; 0BD1 53 pi L0812 ; 0BD2 28 08 12 lr A, I ; 0BD5 4D ci $53 ; 0BD6 25 53 bm L0BE1 ; 0BD8 91 08 ci $17 ; 0BDA 25 17 bm L0BEC ; 0BDC 91 0F li $12 ; 0BDE 20 12 lr 3, A ; 0BE0 53 L0BE1: lr A, S ; 0BE1 4C lr 4, A ; 0BE2 54 ds 4 ; 0BE3 34 lis 1 ; 0BE4 71 lr 5, A ; 0BE5 55 li $41 ; 0BE6 20 41 lr 2, A ; 0BE8 52 pi L083C ; 0BE9 28 08 3C L0BEC: li $80 ; 0BEC 20 80 lr 2, A ; 0BEE 52 dci L1331 ; 0BEF 2A 13 31 pi L08EE ; 0BF2 28 08 EE bz L0BFC ; 0BF5 84 06 clr ; 0BF7 70 lr 2, A ; 0BF8 52 dci L132F ; 0BF9 2A 13 2F L0BFC: clr ; 0BFC 70 as 0 ; 0BFD C0 bnz L0C0A ; 0BFE 94 0B dci L132D ; 0C00 2A 13 2D lis 8 ; 0C03 78 ns $B ; 0C04 FB bz L0C0A ; 0C05 84 04 jmp L0C96 ; 0C07 29 0C 96 L0C0A: lr A, 9 ; 0C0A 49 com ; 0C0B 18 inc ; 0C0C 1F as 0 ; 0C0D C0 bnz L0C13 ; 0C0E 94 04 li $40 ; 0C10 20 40 lr 2, A ; 0C12 52 L0C13: lisu 5 ; 0C13 65 lisl 2 ; 0C14 6A lr A, I ; 0C15 4D lr 3, A ; 0C16 53 lr A, S ; 0C17 4C lr 4, A ; 0C18 54 lis 1 ; 0C19 71 ns $B ; 0C1A FB bnz L0C24 ; 0C1B 94 08 pi L0812 ; 0C1D 28 08 12 lr A, 3 ; 0C20 43 lr I, A ; 0C21 5D lr A, 4 ; 0C22 44 lr D, A ; 0C23 5E L0C24: pi L0812 ; 0C24 28 08 12 pi L082F ; 0C27 28 08 2F li $40 ; 0C2A 20 40 ns $B ; 0C2C FB bz L0C5C ; 0C2D 84 2E lisu 7 ; 0C2F 67 lisl 6 ; 0C30 6E lr A, S ; 0C31 4C ci 6 ; 0C32 25 06 bp L0C68 ; 0C34 81 33 ci 7 ; 0C36 25 07 bz L0C44 ; 0C38 84 0B L0C3A: lr A, $B ; 0C3A 4B oi 6 ; 0C3B 22 06 lr $B, A ; 0C3D 5B br L0C96 ; 0C3E 90 57 .byte $5C, $29, $0E, $16 ; 0C40 L0C44: lisu 2 ; 0C44 62 lisl 1 ; 0C45 69 lr A, S ; 0C46 4C ci $26 ; 0C47 25 26 bm L0C3A ; 0C49 91 F0 ci $1A ; 0C4B 25 1A bp L0C3A ; 0C4D 81 EC lisu 2 ; 0C4F 62 lisl 0 ; 0C50 68 lr A, S ; 0C51 4C ci $32 ; 0C52 25 32 lis $B ; 0C54 7B bm L0C58 ; 0C55 91 02 lis 3 ; 0C57 73 L0C58: lr 9, A ; 0C58 59 jmp L0D1C ; 0C59 29 0D 1C L0C5C: li $10 ; 0C5C 20 10 ns $B ; 0C5E FB bz L0C96 ; 0C5F 84 36 lisu 7 ; 0C61 67 lisl 6 ; 0C62 6E lr A, S ; 0C63 4C ci 6 ; 0C64 25 06 bm L0C3A ; 0C66 91 D3 L0C68: li $10 ; 0C68 20 10 ns $A ; 0C6A FA bnz L0C93 ; 0C6B 94 27 L0C6D: dci L137A ; 0C6D 2A 13 7A pi L088E ; 0C70 28 08 8E lis 1 ; 0C73 71 ns $A ; 0C74 FA lisu 6 ; 0C75 66 lisl 1 ; 0C76 69 lr A, S ; 0C77 4C bz L0C87 ; 0C78 84 0E ci $26 ; 0C7A 25 26 bp L0C82 ; 0C7C 81 05 ai $F6 ; 0C7E 24 F6 br L0C92 ; 0C80 90 11 L0C82: ai $12 ; 0C82 24 12 sr 1 ; 0C84 12 br L0C92 ; 0C85 90 0C L0C87: ci $44 ; 0C87 25 44 bm L0C8F ; 0C89 91 05 ai $A ; 0C8B 24 0A br L0C92 ; 0C8D 90 04 L0C8F: ai $58 ; 0C8F 24 58 sr 1 ; 0C91 12 L0C92: lr S, A ; 0C92 5C L0C93: jmp L0E68 ; 0C93 29 0E 68 ;------------------------------------------------------------------------------- ; play_short_beep_and_update_state (confirmed sound section) ; Select delay data through L1251, wait, pulse $40 (1 kHz) then $00 on port 5. ; The following path continues into event/state processing when required. ;------------------------------------------------------------------------------- L0C96: nop ; 0C96 2B dci L1251 ; 0C97 2A 12 51 lisu 7 ; 0C9A 67 lisl 2 ; 0C9B 6A lr A, S ; 0C9C 4C adc ; 0C9D 8E adc ; 0C9E 8E lm ; 0C9F 16 lr 5, A ; 0CA0 55 lm ; 0CA1 16 L0CA2: inc ; 0CA2 1F bnz L0CA2 ; 0CA3 94 FE ds 5 ; 0CA5 35 bnz L0CA2 ; 0CA6 94 FB li $40 ; 0CA8 20 40 outs 5 ; 0CAA B5 clr ; 0CAB 70 outs 5 ; 0CAC B5 lis 4 ; 0CAD 74 ns $B ; 0CAE FB bnz L0CB2 ; 0CAF 94 02 pk ; 0CB1 0C L0CB2: dci L1381 ; 0CB2 2A 13 81 pi L088E ; 0CB5 28 08 8E li $10 ; 0CB8 20 10 as 9 ; 0CBA C9 as 9 ; 0CBB C9 lr IS, A ; 0CBC 0B lr A, S ; 0CBD 4C lisu 6 ; 0CBE 66 lisl 1 ; 0CBF 69 inc ; 0CC0 1F lr S, A ; 0CC1 5C lr A, $B ; 0CC2 4B ni $FB ; 0CC3 21 FB lr $B, A ; 0CC5 5B lis 1 ; 0CC6 71 ns $A ; 0CC7 FA bz L0CCD ; 0CC8 84 04 lis 4 ; 0CCA 74 as $B ; 0CCB CB lr $B, A ; 0CCC 5B L0CCD: lis 2 ; 0CCD 72 ns $A ; 0CCE FA bz L0CD4 ; 0CCF 84 04 lis 4 ; 0CD1 74 xs $B ; 0CD2 EB lr $B, A ; 0CD3 5B L0CD4: lis 4 ; 0CD4 74 ns $B ; 0CD5 FB bz L0CF9 ; 0CD6 84 22 lr A, S ; 0CD8 4C ci $58 ; 0CD9 25 58 bm L0D13 ; 0CDB 91 37 ci $11 ; 0CDD 25 11 bm L0CE8 ; 0CDF 91 08 lis 2 ; 0CE1 72 ns $A ; 0CE2 FA bz L0CF2 ; 0CE3 84 0E li $21 ; 0CE5 20 21 L0CE7: lr S, A ; 0CE7 5C L0CE8: lis 2 ; 0CE8 72 ns $A ; 0CE9 FA bnz L0CEF ; 0CEA 94 04 jmp L0E68 ; 0CEC 29 0E 68 L0CEF: jmp L0E16 ; 0CEF 29 0E 16 L0CF2: li $49 ; 0CF2 20 49 lr S, A ; 0CF4 5C lis 2 ; 0CF5 72 L0CF6: lr 9, A ; 0CF6 59 br L0D27 ; 0CF7 90 2F L0CF9: ds S ; 0CF9 3C ds S ; 0CFA 3C lr A, S ; 0CFB 4C ci $11 ; 0CFC 25 11 bp L0D10 ; 0CFE 81 11 ci $58 ; 0D00 25 58 bp L0CE7 ; 0D02 81 E4 lis 2 ; 0D04 72 ns $A ; 0D05 FA li $49 ; 0D06 20 49 bnz L0CE7 ; 0D08 94 DE li $21 ; 0D0A 20 21 lr S, A ; 0D0C 5C lis $A ; 0D0D 7A br L0CF6 ; 0D0E 90 E7 L0D10: lis 7 ; 0D10 77 br L0D14 ; 0D11 90 02 L0D13: lis $F ; 0D13 7F L0D14: lr 9, A ; 0D14 59 lis 2 ; 0D15 72 ns $A ; 0D16 FA bz L0D1C ; 0D17 84 04 lis 1 ; 0D19 71 xs $A ; 0D1A EA lr $A, A ; 0D1B 5A L0D1C: lis 8 ; 0D1C 78 ns 9 ; 0D1D F9 lisu 6 ; 0D1E 66 lisl 1 ; 0D1F 69 li $49 ; 0D20 20 49 bnz L0D26 ; 0D22 94 03 li $21 ; 0D24 20 21 L0D26: lr S, A ; 0D26 5C L0D27: dci L13CF ; 0D27 2A 13 CF pi L088E ; 0D2A 28 08 8E jmp L0E18 ; 0D2D 29 0E 18 ;------------------------------------------------------------------------------- ; direction_from_coordinate_delta (strongly likely) ; Compare coordinate pair r9 with pair r0, form absolute X/Y differences and ; encode horizontal direction as 1/2 and vertical direction as 4/8 in r4. ;------------------------------------------------------------------------------- L0D30: li $10 ; 0D30 20 10 as 9 ; 0D32 C9 as 9 ; 0D33 C9 lr IS, A ; 0D34 0B lr A, I ; 0D35 4D lr 5, A ; 0D36 55 lr A, S ; 0D37 4C lr 6, A ; 0D38 56 li $10 ; 0D39 20 10 as 0 ; 0D3B C0 as 0 ; 0D3C C0 lr IS, A ; 0D3D 0B lr A, I ; 0D3E 4D com ; 0D3F 18 inc ; 0D40 1F as 5 ; 0D41 C5 lr 5, A ; 0D42 55 bp L0D47 ; 0D43 81 03 com ; 0D45 18 inc ; 0D46 1F L0D47: lr 4, A ; 0D47 54 lr A, S ; 0D48 4C com ; 0D49 18 inc ; 0D4A 1F as 6 ; 0D4B C6 lr 6, A ; 0D4C 56 bp L0D51 ; 0D4D 81 03 com ; 0D4F 18 inc ; 0D50 1F L0D51: lr 3, A ; 0D51 53 com ; 0D52 18 inc ; 0D53 1F as 4 ; 0D54 C4 clr ; 0D55 70 bm L0D5F ; 0D56 91 08 as 5 ; 0D58 C5 lis 1 ; 0D59 71 bp L0D5D ; 0D5A 81 02 lis 2 ; 0D5C 72 L0D5D: br L0D64 ; 0D5D 90 06 L0D5F: as 6 ; 0D5F C6 lis 4 ; 0D60 74 bp L0D64 ; 0D61 81 02 lis 8 ; 0D63 78 L0D64: lr 4, A ; 0D64 54 br L0D83 ; 0D65 90 1D L0D67: li $10 ; 0D67 20 10 as 0 ; 0D69 C0 as 0 ; 0D6A C0 lr IS, A ; 0D6B 0B lr A, I ; 0D6C 4D com ; 0D6D 18 inc ; 0D6E 1F as 5 ; 0D6F C5 bz L0D76 ; 0D70 84 05 lis 2 ; 0D72 72 bm L0D76 ; 0D73 91 02 lis 1 ; 0D75 71 L0D76: lr 4, A ; 0D76 54 lr A, S ; 0D77 4C com ; 0D78 18 inc ; 0D79 1F as 6 ; 0D7A C6 bz L0D81 ; 0D7B 84 05 lis 8 ; 0D7D 78 bm L0D81 ; 0D7E 91 02 lis 4 ; 0D80 74 L0D81: as 4 ; 0D81 C4 lr 4, A ; 0D82 54 L0D83: jmp L0A24 ; 0D83 29 0A 24 ;------------------------------------------------------------------------------- ; choose_direction_step (strongly likely) ; Produce small signed steps, normally 0, 4 or $FC (-4), from side, state and ; current object coordinates; continue through the direction decoder. ;------------------------------------------------------------------------------- L0D86: clr ; 0D86 70 lr 5, A ; 0D87 55 lr 6, A ; 0D88 56 as 2 ; 0D89 C2 ci 0 ; 0D8A 25 00 bnz L0D98 ; 0D8C 94 0B lis 1 ; 0D8E 71 ns $A ; 0D8F FA lis 4 ; 0D90 74 bnz L0D95 ; 0D91 94 03 li $FC ; 0D93 20 FC L0D95: lr 5, A ; 0D95 55 br L0DA6 ; 0D96 90 0F L0D98: li $11 ; 0D98 20 11 as 7 ; 0D9A C7 as 7 ; 0D9B C7 lr IS, A ; 0D9C 0B lr A, S ; 0D9D 4C ci $23 ; 0D9E 25 23 li $FC ; 0DA0 20 FC bm L0DA5 ; 0DA2 91 02 lis 4 ; 0DA4 74 L0DA5: lr 6, A ; 0DA5 56 L0DA6: li $10 ; 0DA6 20 10 as 7 ; 0DA8 C7 as 7 ; 0DA9 C7 lr IS, A ; 0DAA 0B lr A, I ; 0DAB 4D as 5 ; 0DAC C5 lr 5, A ; 0DAD 55 lr A, S ; 0DAE 4C as 6 ; 0DAF C6 lr 6, A ; 0DB0 56 br L0D67 ; 0DB1 90 B5 ;------------------------------------------------------------------------------- ; lookup_state_table_125d (strongly likely) ; Replace the current scratchpad state through L125D and choose r0=6 or 12 from ; ISAR parity before entering the nested update worker. ;------------------------------------------------------------------------------- L0DB3: dci L125D ; 0DB3 2A 12 5D lr A, S ; 0DB6 4C adc ; 0DB7 8E lm ; 0DB8 16 lr S, A ; 0DB9 5C lr A, IS ; 0DBA 0A ni 1 ; 0DBB 21 01 lis $C ; 0DBD 7C bnz L0DC1 ; 0DBE 94 02 lis 6 ; 0DC0 76 L0DC1: lr 0, A ; 0DC1 50 lisu 6 ; 0DC2 66 lisl 7 ; 0DC3 6F clr ; 0DC4 70 lr S, A ; 0DC5 5C ; nested_state_update (strongly likely) ; Save the caller return from K in Q, process state/formation tables L1313 or ; L12FB, and return explicitly with LR P0,Q at L0E15. L0DC6: lr K, P ; 0DC6 08 lr A, KU ; 0DC7 00 lr QU, A ; 0DC8 06 lr A, KL ; 0DC9 01 lr QL, A ; 0DCA 07 L0DCB: dci L1313 ; 0DCB 2A 13 13 lisu 6 ; 0DCE 66 lisl 1 ; 0DCF 69 lr A, S ; 0DD0 4C lr 6, A ; 0DD1 56 lisu 6 ; 0DD2 66 lisl 7 ; 0DD3 6F lis 4 ; 0DD4 74 ns S ; 0DD5 FC bz L0DEB ; 0DD6 84 14 dci L12FB ; 0DD8 2A 12 FB lr A, 0 ; 0DDB 40 ci 6 ; 0DDC 25 06 bm L0DEB ; 0DDE 91 0C lis $C ; 0DE0 7C adc ; 0DE1 8E lis 1 ; 0DE2 71 ns $A ; 0DE3 FA li $F6 ; 0DE4 20 F6 bnz L0DE9 ; 0DE6 94 02 lis $A ; 0DE8 7A L0DE9: as 6 ; 0DE9 C6 lr 6, A ; 0DEA 56 L0DEB: lisu 5 ; 0DEB 65 lisl 3 ; 0DEC 6B lr A, 0 ; 0DED 40 adc ; 0DEE 8E adc ; 0DEF 8E lm ; 0DF0 16 lr D, A ; 0DF1 5E pi L08EE ; 0DF2 28 08 EE lm ; 0DF5 16 bz L0DFA ; 0DF6 84 03 com ; 0DF8 18 inc ; 0DF9 1F L0DFA: as 6 ; 0DFA C6 L0DFB: lr S, A ; 0DFB 5C ci $C ; 0DFC 25 0C bp L0E06 ; 0DFE 81 07 ci $5E ; 0E00 25 5E bp L0E09 ; 0E02 81 06 ai $FE ; 0E04 24 FE L0E06: inc ; 0E06 1F br L0DFB ; 0E07 90 F3 L0E09: clr ; 0E09 70 lr $B, A ; 0E0A 5B pi L0BBB ; 0E0B 28 0B BB ds 0 ; 0E0E 30 bz L0E15 ; 0E0F 84 05 lis 6 ; 0E11 76 xs 0 ; 0E12 E0 bnz L0DCB ; 0E13 94 B7 L0E15: lr P0, Q ; 0E15 0D ;------------------------------------------------------------------------------- ; start_round_or_screen (strongly likely) ; Reset phase-local state, toggle r10 bit 0, draw fixed screen components, and ; initialize players/objects for the next side or round. ;------------------------------------------------------------------------------- L0E16: clr ; 0E16 70 lr 9, A ; 0E17 59 L0E18: lis 1 ; 0E18 71 xs $A ; 0E19 EA lr $A, A ; 0E1A 5A lisu 6 ; 0E1B 66 lisl 0 ; 0E1C 68 clr ; 0E1D 70 lr S, A ; 0E1E 5C ; draw_fixed_screen_element: render parameter block L135F through L0820. L0E1F: dci L135F ; 0E1F 2A 13 5F pi L0820 ; 0E22 28 08 20 L0E25: lisu 5 ; 0E25 65 lisl 6 ; 0E26 6E li $12 ; 0E27 20 12 lr 4, A ; 0E29 54 li $1B ; 0E2A 20 1B lr 3, A ; 0E2C 53 clr ; 0E2D 70 lr 2, A ; 0E2E 52 L0E2F: lr A, S ; 0E2F 4C sr 4 ; 0E30 14 lr 1, A ; 0E31 51 pi L0840 ; 0E32 28 08 40 lr A, I ; 0E35 4D sl 4 ; 0E36 15 sr 4 ; 0E37 14 lr 1, A ; 0E38 51 lis 5 ; 0E39 75 as 3 ; 0E3A C3 lr 3, A ; 0E3B 53 pi L0840 ; 0E3C 28 08 40 li $43 ; 0E3F 20 43 lr 3, A ; 0E41 53 li $80 ; 0E42 20 80 lr 2, A ; 0E44 52 lr A, IS ; 0E45 0A ci $2F ; 0E46 25 2F bz L0E2F ; 0E48 84 E6 lis 7 ; 0E4A 77 ns 9 ; 0E4B F9 bz L0E60 ; 0E4C 84 13 ds 9 ; 0E4E 39 lis 8 ; 0E4F 78 ns 9 ; 0E50 F9 lisl 6 ; 0E51 6E bnz L0E55 ; 0E52 94 02 lr A, I ; 0E54 4D L0E55: li $67 ; 0E55 20 67 outs 5 ; 0E57 B5 lr 5, A ; 0E58 55 asd S ; 0E59 DC lr S, A ; 0E5A 5C pi L0818 ; 0E5B 28 08 18 br L0E25 ; 0E5E 90 C6 L0E60: lis 2 ; 0E60 72 lr 4, A ; 0E61 54 L0E62: pi L0818 ; 0E62 28 08 18 ds 4 ; 0E65 34 bnz L0E62 ; 0E66 94 FB ;------------------------------------------------------------------------------- ; advance_init_phase (confirmed counter behavior) ; Increment O60 and repeat initialization while the phase value is below four. ; After phase four, build the field and initialize active play state. ;------------------------------------------------------------------------------- L0E68: lisu 6 ; 0E68 66 lisl 0 ; 0E69 68 lr A, S ; 0E6A 4C inc ; 0E6B 1F lr S, A ; 0E6C 5C ci 4 ; 0E6D 25 04 bm L0E16 ; 0E6F 91 A6 lis 2 ; 0E71 72 lr 4, A ; 0E72 54 L0E73: pi L0818 ; 0E73 28 08 18 ds 4 ; 0E76 34 bnz L0E73 ; 0E77 94 FB lisu 2 ; 0E79 62 lisl 0 ; 0E7A 68 pi L082C ; 0E7B 28 08 2C dci L1333 ; 0E7E 2A 13 33 lis 8 ; 0E81 78 lr 8, A ; 0E82 58 L0E83: pi L0820 ; 0E83 28 08 20 ds 8 ; 0E86 38 bnz L0E83 ; 0E87 94 FB L0E89: lis $D ; 0E89 7D lr 4, A ; 0E8A 54 lis 2 ; 0E8B 72 lr 6, A ; 0E8C 56 pi L084A ; 0E8D 28 08 4A li $37 ; 0E90 20 37 lr 4, A ; 0E92 54 lis 2 ; 0E93 72 lr 6, A ; 0E94 56 pi L084A ; 0E95 28 08 4A lis 7 ; 0E98 77 as 3 ; 0E99 C3 lr 3, A ; 0E9A 53 ci $55 ; 0E9B 25 55 bp L0E89 ; 0E9D 81 EB lis 2 ; 0E9F 72 lr 9, A ; 0EA0 59 lr A, $A ; 0EA1 4A ni $C5 ; 0EA2 21 C5 lr $A, A ; 0EA4 5A lisu 6 ; 0EA5 66 lisl 1 ; 0EA6 69 lr A, D ; 0EA7 4E lr 3, A ; 0EA8 53 ds 3 ; 0EA9 33 lis 7 ; 0EAA 77 lr 4, A ; 0EAB 54 lis 1 ; 0EAC 71 ns $A ; 0EAD FA lr $A, A ; 0EAE 5A clr ; 0EAF 70 bnz L0EB4 ; 0EB0 94 03 li $80 ; 0EB2 20 80 L0EB4: lr 2, A ; 0EB4 52 lr A, S ; 0EB5 4C lr 1, A ; 0EB6 51 pi L0840 ; 0EB7 28 08 40 pi L09C4 ; 0EBA 28 09 C4 clr ; 0EBD 70 as S ; 0EBE CC bnz L0ED1 ; 0EBF 94 11 li $F0 ; 0EC1 20 F0 lr S, A ; 0EC3 5C dci L1392 ; 0EC4 2A 13 92 pi L088E ; 0EC7 28 08 8E lisl 0 ; 0ECA 68 ds S ; 0ECB 3C clr ; 0ECC 70 lr 9, A ; 0ECD 59 jmp L0E1F ; 0ECE 29 0E 1F L0ED1: lisu 2 ; 0ED1 62 lisl 0 ; 0ED2 68 L0ED3: lis 4 ; 0ED3 74 lr S, A ; 0ED4 5C lr A, IS ; 0ED5 0A inc ; 0ED6 1F lr IS, A ; 0ED7 0B ci $2A ; 0ED8 25 2A bnz L0ED3 ; 0EDA 94 F8 lis $C ; 0EDC 7C lr 0, A ; 0EDD 50 lisu 6 ; 0EDE 66 lisl 7 ; 0EDF 6F lis 4 ; 0EE0 74 lr S, A ; 0EE1 5C pi L0DC6 ; 0EE2 28 0D C6 pi L0DC6 ; 0EE5 28 0D C6 lisu 7 ; 0EE8 67 lisl 6 ; 0EE9 6E li $C0 ; 0EEA 20 C0 lr I, A ; 0EEC 5D lr D, A ; 0EED 5E lisu 2 ; 0EEE 62 lisl 0 ; 0EEF 68 li $60 ; 0EF0 20 60 lr S, A ; 0EF2 5C ;------------------------------------------------------------------------------- ; main_game_loop (strongly likely) ; Alternate controller sources, debounce console input, update active objects, ; evaluate state transitions and invoke the table-driven update worker. ;------------------------------------------------------------------------------- L0EF3: lisu 7 ; 0EF3 67 lisl 6 ; 0EF4 6E L0EF5: li $B0 ; 0EF5 20 B0 L0EF7: inc ; 0EF7 1F bnz L0EF7 ; 0EF8 94 FE lis 1 ; 0EFA 71 lr 4, A ; 0EFB 54 L0EFC: lr A, IS ; 0EFC 0A xi 1 ; 0EFD 23 01 lr IS, A ; 0EFF 0B lr A, IS ; 0F00 0A lr 7, A ; 0F01 57 ni 1 ; 0F02 21 01 bnz L0F0B ; 0F04 94 06 pi L08B0 ; 0F06 28 08 B0 br L0F0E ; 0F09 90 04 L0F0B: pi L08C1 ; 0F0B 28 08 C1 L0F0E: lr A, D ; 0F0E 4E lr 6, A ; 0F0F 56 clr ; 0F10 70 as S ; 0F11 CC bnz L0F22 ; 0F12 94 0F lis 5 ; 0F14 75 lr 5, A ; 0F15 55 ins 0 ; 0F16 A0 com ; 0F17 18 ni $F ; 0F18 21 0F bz L0F22 ; 0F1A 84 07 L0F1C: ds 5 ; 0F1C 35 sr 1 ; 0F1D 12 bnz L0F1C ; 0F1E 94 FD lr A, 5 ; 0F20 45 lr S, A ; 0F21 5C L0F22: lr A, 7 ; 0F22 47 lr IS, A ; 0F23 0B lr A, S ; 0F24 4C ni $C0 ; 0F25 21 C0 bnz L0F33 ; 0F27 94 0B ds 4 ; 0F29 34 bnz L0F8E ; 0F2A 94 63 li $CE ; 0F2C 20 CE L0F2E: inc ; 0F2E 1F bnz L0F2E ; 0F2F 94 FE br L0EFC ; 0F31 90 CA L0F33: lisu 7 ; 0F33 67 lisl 4 ; 0F34 6C ds S ; 0F35 3C clr ; 0F36 70 lisu 2 ; 0F37 62 lisl 0 ; 0F38 68 as S ; 0F39 CC bnz L0F52 ; 0F3A 94 17 lr A, 7 ; 0F3C 47 lr IS, A ; 0F3D 0B ni 1 ; 0F3E 21 01 bz L0F49 ; 0F40 84 08 lr A, D ; 0F42 4E li $C0 ; 0F43 20 C0 ns S ; 0F45 FC lr A, I ; 0F46 4D bnz L0EF5 ; 0F47 94 AD L0F49: lr A, S ; 0F49 4C ni $C0 ; 0F4A 21 C0 bz L0EF5 ; 0F4C 84 A8 clr ; 0F4E 70 lr S, A ; 0F4F 5C br L0F82 ; 0F50 90 31 L0F52: lisu 2 ; 0F52 62 lisl 1 ; 0F53 69 ds D ; 0F54 3E bnz L0F58 ; 0F55 94 02 ds D ; 0F57 3E L0F58: lr A, 7 ; 0F58 47 lr IS, A ; 0F59 0B lr A, 6 ; 0F5A 46 ni $30 ; 0F5B 21 30 bnz L0F64 ; 0F5D 94 06 L0F5F: lis $F ; 0F5F 7F ns 6 ; 0F60 F6 ai $C0 ; 0F61 24 C0 lr S, A ; 0F63 5C L0F64: lr A, 6 ; 0F64 46 com ; 0F65 18 inc ; 0F66 1F as S ; 0F67 CC ni $F ; 0F68 21 0F bnz L0F5F ; 0F6A 94 F4 lr A, S ; 0F6C 4C ai $C0 ; 0F6D 24 C0 lr S, A ; 0F6F 5C ni $C0 ; 0F70 21 C0 bz L0F77 ; 0F72 84 04 jmp L0EF5 ; 0F74 29 0E F5 L0F77: lr A, IS ; 0F77 0A ci $3E ; 0F78 25 3E bnz L0F82 ; 0F7A 94 07 lisu 2 ; 0F7C 62 lisl 0 ; 0F7D 68 lis 3 ; 0F7E 73 lr S, A ; 0F7F 5C lr A, 7 ; 0F80 47 lr IS, A ; 0F81 0B L0F82: pi L0DB3 ; 0F82 28 0D B3 lis 6 ; 0F85 76 as 0 ; 0F86 C0 lr 0, A ; 0F87 50 pi L0DC6 ; 0F88 28 0D C6 jmp L0EF3 ; 0F8B 29 0E F3 ;------------------------------------------------------------------------------- ; Timed game-event handling and extended collision checks (strongly likely). ; Initializes O20, waits for controller activity or timeout, updates event flags ; and object state, then dispatches sound/scene handling. ;------------------------------------------------------------------------------- L0F8E: clr ; 0F8E 70 lr 5, A ; 0F8F 55 lisu 7 ; 0F90 67 lisl 2 ; 0F91 6A as S ; 0F92 CC bnz L0F97 ; 0F93 94 03 lis 5 ; 0F95 75 lr S, A ; 0F96 5C L0F97: lisu 2 ; 0F97 62 lisl 0 ; 0F98 68 li $B0 ; 0F99 20 B0 lr S, A ; 0F9B 5C pi L0818 ; 0F9C 28 08 18 L0F9F: lisu 2 ; 0F9F 62 lisl 1 ; 0FA0 69 ds D ; 0FA1 3E bnz L0FAD ; 0FA2 94 0A ds S ; 0FA4 3C bnz L0FAD ; 0FA5 94 07 lisu 6 ; 0FA7 66 lisl 0 ; 0FA8 68 ds S ; 0FA9 3C jmp L0C6D ; 0FAA 29 0C 6D L0FAD: pi L08B0 ; 0FAD 28 08 B0 bz L0F9F ; 0FB0 84 EE lisl 5 ; 0FB2 6D lis 2 ; 0FB3 72 lr S, A ; 0FB4 5C lisu 7 ; 0FB5 67 lisl 7 ; 0FB6 6F clr ; 0FB7 70 as S ; 0FB8 CC bnz L0FBF ; 0FB9 94 05 lr A, $A ; 0FBB 4A oi $40 ; 0FBC 22 40 lr $A, A ; 0FBE 5A L0FBF: lis 3 ; 0FBF 73 lr 9, A ; 0FC0 59 lisu 5 ; 0FC1 65 lisl 4 ; 0FC2 6C li $11 ; 0FC3 20 11 lr I, A ; 0FC5 5D clr ; 0FC6 70 lr S, A ; 0FC7 5C lisu 7 ; 0FC8 67 lisl 1 ; 0FC9 69 li $77 ; 0FCA 20 77 lr S, A ; 0FCC 5C L0FCD: li $FD ; 0FCD 20 FD lr 6, A ; 0FCF 56 lis 2 ; 0FD0 72 lr 5, A ; 0FD1 55 lisu 6 ; 0FD2 66 lisl 1 ; 0FD3 69 lr A, S ; 0FD4 4C com ; 0FD5 18 inc ; 0FD6 1F lisu 2 ; 0FD7 62 lisl 6 ; 0FD8 6E as S ; 0FD9 CC bz L0FE9 ; 0FDA 84 0E bp L0FDF ; 0FDC 81 02 ds 5 ; 0FDE 35 L0FDF: lis 1 ; 0FDF 71 ns $A ; 0FE0 FA bz L0FE6 ; 0FE1 84 04 ds 5 ; 0FE3 35 lis 3 ; 0FE4 73 lr 6, A ; 0FE5 56 L0FE6: ds 5 ; 0FE6 35 bnz L0FEF ; 0FE7 94 07 L0FE9: lr A, $A ; 0FE9 4A oi $20 ; 0FEA 22 20 lr $A, A ; 0FEC 5A br L1035 ; 0FED 90 47 L0FEF: lisu 7 ; 0FEF 67 lisl 4 ; 0FF0 6C lr A, I ; 0FF1 4D sr 4 ; 0FF2 14 sr 1 ; 0FF3 12 ai $11 ; 0FF4 24 11 com ; 0FF6 18 as S ; 0FF7 CC bnz L1035 ; 0FF8 94 3C lis 3 ; 0FFA 73 xs 9 ; 0FFB E9 bnz L1035 ; 0FFC 94 38 lisl 6 ; 0FFE 6E lis 4 ; 0FFF 74 xs S ; 1000 EC bz L1035 ; 1001 84 33 lis 5 ; 1003 75 xs S ; 1004 EC bz L1035 ; 1005 84 2F lisu 4 ; 1007 64 lisl 7 ; 1008 6F lr A, S ; 1009 4C ci $19 ; 100A 25 19 bp L1035 ; 100C 81 28 lisu 5 ; 100E 65 lisl 1 ; 100F 69 lr A, S ; 1010 4C ci $23 ; 1011 25 23 bm L1035 ; 1013 91 21 lisu 2 ; 1015 62 lisl 2 ; 1016 6A lr A, S ; 1017 4C as 6 ; 1018 C6 lr S, A ; 1019 5C lisl 4 ; 101A 6C lr S, A ; 101B 5C lr A, 6 ; 101C 46 com ; 101D 18 inc ; 101E 1F lr 6, A ; 101F 56 lisu 4 ; 1020 64 lisl 6 ; 1021 6E as S ; 1022 CC lr S, A ; 1023 5C lisu 5 ; 1024 65 lisl 0 ; 1025 68 lr A, 6 ; 1026 46 as S ; 1027 CC lr S, A ; 1028 5C lisu 6 ; 1029 66 lisl 1 ; 102A 69 lr A, S ; 102B 4C ai $FC ; 102C 24 FC lr 3, A ; 102E 53 dci L135B ; 102F 2A 13 5B pi L0822 ; 1032 28 08 22 ;------------------------------------------------------------------------------- ; Repositioning and formation/zone tests (strongly likely). ; Copies coordinate state, evaluates object zones and finds minimum distances ; against object records O30-O33. r10 bit 4 records the proximity condition. ;------------------------------------------------------------------------------- L1035: pi L08B0 ; 1035 28 08 B0 lis 8 ; 1038 78 ns $A ; 1039 FA bnz L10B9 ; 103A 94 7E lisu 2 ; 103C 62 lisl 6 ; 103D 6E lr A, I ; 103E 4D lr 7, A ; 103F 57 lr A, I ; 1040 4D lisu 2 ; 1041 62 lisl 1 ; 1042 69 lr D, A ; 1043 5E lr A, 7 ; 1044 47 lr S, A ; 1045 5C li $20 ; 1046 20 20 ns $A ; 1048 FA bz L104E ; 1049 84 04 L104B: jmp L10E0 ; 104B 29 10 E0 L104E: lisu 7 ; 104E 67 lisl 3 ; 104F 6B as S ; 1050 CC bp L104B ; 1051 81 F9 lis 3 ; 1053 73 xs 9 ; 1054 E9 bnz L104B ; 1055 94 F5 lr 9, A ; 1057 59 lis 8 ; 1058 78 as $A ; 1059 CA lr $A, A ; 105A 5A lisl 6 ; 105B 6E lr A, S ; 105C 4C ci 6 ; 105D 25 06 bp L1096 ; 105F 81 36 lr A, $A ; 1061 4A oi 2 ; 1062 22 02 lr $A, A ; 1064 5A lisl 4 ; 1065 6C lr A, I ; 1066 4D sr 4 ; 1067 14 sr 1 ; 1068 12 ai $A ; 1069 24 0A as S ; 106B CC lisl 1 ; 106C 69 lr S, A ; 106D 5C lisl 6 ; 106E 6E lis 7 ; 106F 77 xs S ; 1070 EC bnz L1096 ; 1071 94 24 lisl 1 ; 1073 69 lr A, S ; 1074 4C ai $FD ; 1075 24 FD lr S, A ; 1077 5C lis 1 ; 1078 71 ns $A ; 1079 FA lisu 2 ; 107A 62 lisl 0 ; 107B 68 bnz L1083 ; 107C 94 06 li $F6 ; 107E 20 F6 as S ; 1080 CC br L1087 ; 1081 90 05 L1083: lr A, S ; 1083 4C com ; 1084 18 ai $61 ; 1085 24 61 L1087: lr 5, A ; 1087 55 lisu 7 ; 1088 67 lisl 4 ; 1089 6C li $3F ; 108A 20 3F ns D ; 108C FE as 5 ; 108D C5 ci $39 ; 108E 25 39 clr ; 1090 70 bp L1095 ; 1091 81 03 li $20 ; 1093 20 20 L1095: lr S, A ; 1095 5C L1096: lr A, $A ; 1096 4A oi $40 ; 1097 22 40 lr $A, A ; 1099 5A lisu 7 ; 109A 67 lisl 3 ; 109B 6B li $10 ; 109C 20 10 ns S ; 109E FC lis 6 ; 109F 76 bnz L10A9 ; 10A0 94 08 li $20 ; 10A2 20 20 ns S ; 10A4 FC lis $A ; 10A5 7A bnz L10A9 ; 10A6 94 02 lis 2 ; 10A8 72 L10A9: lr 7, A ; 10A9 57 lis 1 ; 10AA 71 ns $A ; 10AB FA bz L10B5 ; 10AC 84 08 li $30 ; 10AE 20 30 ns S ; 10B0 FC lis $F ; 10B1 7F bnz L10B5 ; 10B2 94 02 lis 3 ; 10B4 73 L10B5: lisu 6 ; 10B5 66 lisl 7 ; 10B6 6F xs 7 ; 10B7 E7 lr S, A ; 10B8 5C L10B9: lisu 2 ; 10B9 62 lisl 0 ; 10BA 68 lr A, I ; 10BB 4D com ; 10BC 18 inc ; 10BD 1F lr 4, A ; 10BE 54 lr A, D ; 10BF 4E com ; 10C0 18 inc ; 10C1 1F lr 5, A ; 10C2 55 lisu 3 ; 10C3 63 lisl 0 ; 10C4 68 L10C5: lr A, I ; 10C5 4D as 4 ; 10C6 C4 bp L10CB ; 10C7 81 03 com ; 10C9 18 inc ; 10CA 1F L10CB: lr 2, A ; 10CB 52 lr A, I ; 10CC 4D as 5 ; 10CD C5 bp L10D2 ; 10CE 81 03 com ; 10D0 18 inc ; 10D1 1F L10D2: as 2 ; 10D2 C2 ci $F ; 10D3 25 0F bnc L10DB ; 10D5 92 05 lr A, $A ; 10D7 4A oi $10 ; 10D8 22 10 lr $A, A ; 10DA 5A L10DB: lr A, IS ; 10DB 0A ci $1C ; 10DC 25 1C bp L10C5 ; 10DE 81 E6 ;------------------------------------------------------------------------------- ; Player/object turn and automatic movement selection (strongly likely). ; Select control- or table-driven movement, iterate object groups and route the ; resulting event to the common frame/state handlers. ;------------------------------------------------------------------------------- L10E0: lisu 7 ; 10E0 67 lisl 5 ; 10E1 6D lr A, S ; 10E2 4C com ; 10E3 18 inc ; 10E4 1F lisl 1 ; 10E5 69 as S ; 10E6 CC clr ; 10E7 70 lr 0, A ; 10E8 50 bm L10EE ; 10E9 91 04 lisu 6 ; 10EB 66 lisl 7 ; 10EC 6F lr A, S ; 10ED 4C L10EE: lr 4, A ; 10EE 54 lis 8 ; 10EF 78 ns $A ; 10F0 FA bz L10F6 ; 10F1 84 04 pi L0A24 ; 10F3 28 0A 24 L10F6: lis 2 ; 10F6 72 ns $A ; 10F7 FA bnz L10FD ; 10F8 94 04 jmp L1137 ; 10FA 29 11 37 L10FD: lis 6 ; 10FD 76 lr 0, A ; 10FE 50 L10FF: pi L0A1F ; 10FF 28 0A 1F ds 0 ; 1102 30 bnz L10FF ; 1103 94 FB pi L08C1 ; 1105 28 08 C1 lis $C ; 1108 7C lr 0, A ; 1109 50 lis 8 ; 110A 78 ns $A ; 110B FA bz L111A ; 110C 84 0D L110E: pi L0A1F ; 110E 28 0A 1F ds 0 ; 1111 30 lr A, 0 ; 1112 40 ci 6 ; 1113 25 06 bm L110E ; 1115 91 F8 jmp L1227 ; 1117 29 12 27 L111A: com ; 111A 18 inc ; 111B 1F as 9 ; 111C C9 bnz L1124 ; 111D 94 06 pi L0A1F ; 111F 28 0A 1F br L112E ; 1122 90 0B L1124: lis 1 ; 1124 71 ns $A ; 1125 FA lis 2 ; 1126 72 bnz L112A ; 1127 94 02 lis 1 ; 1129 71 L112A: lr 4, A ; 112A 54 pi L0A24 ; 112B 28 0A 24 L112E: ds 0 ; 112E 30 lr A, 0 ; 112F 40 ci 6 ; 1130 25 06 bm L111A ; 1132 91 E7 jmp L1200 ; 1134 29 12 00 ;------------------------------------------------------------------------------- ; Formation lookup and object movement (strongly likely). ; Split L08C7 results into nibbles, normalize direction bits, read L1297-based ; formation records through L08DA and apply resulting moves. ;------------------------------------------------------------------------------- L1137: lis 2 ; 1137 72 lr 0, A ; 1138 50 pi L08C7 ; 1139 28 08 C7 ni $F0 ; 113C 21 F0 sr 4 ; 113E 14 lr 7, A ; 113F 57 pi L0A10 ; 1140 28 0A 10 ds 0 ; 1143 30 pi L08C7 ; 1144 28 08 C7 ni $F ; 1147 21 0F lr 7, A ; 1149 57 pi L0A10 ; 114A 28 0A 10 lis 3 ; 114D 73 lr 0, A ; 114E 50 xs 9 ; 114F E9 bz L1159 ; 1150 84 08 clr ; 1152 70 lr 4, A ; 1153 54 pi L0A24 ; 1154 28 0A 24 br L1189 ; 1157 90 31 L1159: pi L0A1F ; 1159 28 0A 1F lis 6 ; 115C 76 lr 0, A ; 115D 50 pi L08DA ; 115E 28 08 DA lisu 5 ; 1161 65 lisl 4 ; 1162 6C bnz L1166 ; 1163 94 02 lr S, A ; 1165 5C L1166: li $F0 ; 1166 20 F0 ns S ; 1168 FC sr 4 ; 1169 14 lr 7, A ; 116A 57 pi L0A10 ; 116B 28 0A 10 ds 0 ; 116E 30 lisu 5 ; 116F 65 lisl 4 ; 1170 6C lis $F ; 1171 7F ns S ; 1172 FC lr 7, A ; 1173 57 pi L0A10 ; 1174 28 0A 10 ds 0 ; 1177 30 pi L08DA ; 1178 28 08 DA lm ; 117B 16 lisu 5 ; 117C 65 lisl 5 ; 117D 6D bnz L1181 ; 117E 94 02 lr S, A ; 1180 5C L1181: lis $F ; 1181 7F ns S ; 1182 FC lr 7, A ; 1183 57 pi L0A10 ; 1184 28 0A 10 br L1194 ; 1187 90 0C L1189: lis 6 ; 1189 76 lr 0, A ; 118A 50 L118B: pi L0A1F ; 118B 28 0A 1F ds 0 ; 118E 30 lr A, 0 ; 118F 40 ci 3 ; 1190 25 03 bnz L118B ; 1192 94 F8 ;------------------------------------------------------------------------------- ; Multi-object update and event evaluation (strongly likely). ; Compare object 12 and 11, read the opposing controller and update objects 10 ; through 7 using direct controls or generated direction steps. ;------------------------------------------------------------------------------- L1194: lis $C ; 1194 7C lr 0, A ; 1195 50 pi L0D30 ; 1196 28 0D 30 ds 0 ; 1199 30 pi L0D30 ; 119A 28 0D 30 pi L08C1 ; 119D 28 08 C1 li $30 ; 11A0 20 30 ns S ; 11A2 FC bz L11A9 ; 11A3 84 05 lr A, $A ; 11A5 4A oi $40 ; 11A6 22 40 lr $A, A ; 11A8 5A L11A9: lis $A ; 11A9 7A lr 0, A ; 11AA 50 pi L0A1F ; 11AB 28 0A 1F ds 0 ; 11AE 30 L11AF: li $40 ; 11AF 20 40 ns $A ; 11B1 FA bnz L11CF ; 11B2 94 1C lr A, 0 ; 11B4 40 ci 8 ; 11B5 25 08 bnz L11BD ; 11B7 94 05 lis 6 ; 11B9 76 lr 7, A ; 11BA 57 br L11BF ; 11BB 90 03 L11BD: lis 5 ; 11BD 75 lr 7, A ; 11BE 57 L11BF: lis 1 ; 11BF 71 lisu 7 ; 11C0 67 lisl 7 ; 11C1 6F ns S ; 11C2 FC lr 2, A ; 11C3 52 lr A, S ; 11C4 4C ai $FF ; 11C5 24 FF ni 2 ; 11C7 21 02 sr 1 ; 11C9 12 as 0 ; 11CA C0 ni 1 ; 11CB 21 01 bnz L11D4 ; 11CD 94 06 L11CF: pi L0A1F ; 11CF 28 0A 1F br L11D7 ; 11D2 90 04 L11D4: pi L0D86 ; 11D4 28 0D 86 L11D7: ds 0 ; 11D7 30 lr A, 0 ; 11D8 40 ci 7 ; 11D9 25 07 bm L11AF ; 11DB 91 D3 lisu 7 ; 11DD 67 lisl 3 ; 11DE 6B li $40 ; 11DF 20 40 ns S ; 11E1 FC bnz L11FD ; 11E2 94 1A lisl 7 ; 11E4 6F lr A, D ; 11E5 4E ci 4 ; 11E6 25 04 bp L11F8 ; 11E8 81 0F lisu 7 ; 11EA 67 lisl 5 ; 11EB 6D lr A, S ; 11EC 4C ci $A ; 11ED 25 0A bm L11F8 ; 11EF 91 08 lis 6 ; 11F1 76 lr 7, A ; 11F2 57 pi L0A10 ; 11F3 28 0A 10 br L1200 ; 11F6 90 09 L11F8: pi L0D30 ; 11F8 28 0D 30 br L1200 ; 11FB 90 04 L11FD: pi L0A1F ; 11FD 28 0A 1F L1200: lis 2 ; 1200 72 lr 5, A ; 1201 55 clr ; 1202 70 as 9 ; 1203 C9 bz L1227 ; 1204 84 22 ci 6 ; 1206 25 06 bm L120B ; 1208 91 02 ds 5 ; 120A 35 L120B: lis 1 ; 120B 71 ns $A ; 120C FA bz L1210 ; 120D 84 02 ds 5 ; 120F 35 L1210: li $10 ; 1210 20 10 as 9 ; 1212 C9 as 9 ; 1213 C9 lr IS, A ; 1214 0B lr A, S ; 1215 4C ds 5 ; 1216 35 bz L1220 ; 1217 84 08 ci $57 ; 1219 25 57 bp L1227 ; 121B 81 0B jmp L0D13 ; 121D 29 0D 13 L1220: ci $12 ; 1220 25 12 bm L1227 ; 1222 91 04 jmp L0D10 ; 1224 29 0D 10 ;------------------------------------------------------------------------------- ; Frame/time update (strongly likely) ; Advance O75, apply timing increment from L124D to O63, propagate carry into ; O62, optionally redraw, then re-enter the active update path at L0FCD. ;------------------------------------------------------------------------------- L1227: lisu 7 ; 1227 67 lisl 5 ; 1228 6D lr A, S ; 1229 4C inc ; 122A 1F lr S, A ; 122B 5C ci $60 ; 122C 25 60 bp L1232 ; 122E 81 03 ds S ; 1230 3C ds S ; 1231 3C L1232: dci L124D ; 1232 2A 12 4D lisu 7 ; 1235 67 lisl 2 ; 1236 6A lr A, S ; 1237 4C adc ; 1238 8E lm ; 1239 16 lisu 6 ; 123A 66 lisl 3 ; 123B 6B as S ; 123C CC lr S, A ; 123D 5C bnc L124A ; 123E 92 0B lisu 6 ; 1240 66 lisl 2 ; 1241 6A clr ; 1242 70 as S ; 1243 CC bz L1247 ; 1244 84 02 ds S ; 1246 3C L1247: pi L09C4 ; 1247 28 09 C4 L124A: jmp L0FCD ; 124A 29 0F CD ;=============================================================================== ; DATA TABLES $124D-$13E9 ; This range is addressed from reachable code through DCI. It must remain raw ; data. Labels below describe known consumers; contents are preserved exactly. ;=============================================================================== ; frame/tempo increment table used at L1232 L124D: .byte $50, $14, $1D, $38 ; 124D ; Delay/parameter table used by the short 1 kHz beep at L0C96. L1251: .byte $48, $29, $01, $FF, $01, $00, $04, $00, $06, $00, $02, $00 ; 1251 ; State lookup table used by L0DB3. L125D: .byte $00, $03, $07, $AB, $05, $04, $06, $AB, $01, $02, $08 ; 125D ; Variable-length lookup/formation data consumed by L08C7. L1268: .byte $08, $09, $0A, $0B, $0C, $17, $22, $23, $24, $77, $00, $77, $00, $77, $00, $77 ; 1268 .byte $00, $08, $00, $0C, $88, $0F, $81, $11, $80, $13, $01, $77, $11, $03, $00, $07 ; 1278 .byte $44, $0A, $50, $0C, $00, $0E, $00, $77, $11, $77, $00, $77, $00, $77, $00 ; 1288 ; Variable-length lookup/formation data consumed by L08DA. L1297: .byte $0A, $1C, $25, $34, $40, $52, $5B, $67, $67, $77, $11, $03, $03, $11, $01, $06 ; 1297 .byte $45, $01, $0F, $48, $01, $12, $08, $01, $17, $01, $01, $1B, $01, $04, $77, $06 ; 12A7 .byte $11, $01, $0A, $11, $00, $0C, $95, $00, $77, $03, $11, $01, $0E, $49, $00, $14 ; 12B7 .byte $04, $00, $19, $92, $01, $20, $98, $04, $77, $03, $51, $01, $12, $52, $01, $16 ; 12C7 .byte $14, $01, $1B, $91, $01, $77, $03, $11, $05, $07, $51, $05, $0A, $51, $05, $0D ; 12D7 .byte $12, $09, $0E, $15, $09, $21, $A5, $04, $77, $08, $15, $01, $0C, $55, $01, $10 ; 12E7 .byte $84, $01, $77, $02 ; 12F7 ; Alternate state/formation table selected inside L0DCB. L12FB: .byte $11, $08, $07, $11, $09, $0B, $58, $09, $0D, $15, $00, $77, $77, $77, $1E, $0A ; 12FB .byte $22, $0A, $1C, $06, $24, $06, $1E, $02 ; 130B ; Primary state/formation table selected inside L0DCB. L1313: .byte $22, $02, $1C, $02, $20, $02, $20, $07, $23, $0A, $2C, $03, $16, $02, $20, $08 ; 1313 .byte $16, $0B, $2C, $0C, $1C, $14, $1C, $02, $20, $02 ; 1323 ; Three short selector/bitmap records chosen near L0BEC. L132D: .byte $FF, $80 ; 132D L132F: .byte $AA, $80 ; 132F L1331: .byte $F7, $80 ; 1331 ; Eight consecutive graphics parameter records rendered from L0E83. L1333: .byte $09, $37, $41, $59, $01, $09, $0E, $41, $01, $2A, $09, $0E, $41, $59, $01, $61 ; 1333 .byte $0E, $41, $01, $2A, $0A, $0F, $C1, $57, $28, $58, $0C, $41, $01, $2E, $0A, $07 ; 1343 .byte $C1, $61, $05, $12, $0C, $41, $01, $2E ; 1353 ; Graphics parameter block entered through L0822 at $102F. L135B: .byte $17, $C1, $09, $11 ; 135B ; Fixed screen graphics parameter block entered through L0820 at $0E1F. L135F: .byte $19, $11, $C1, $33, $07 ; 135F ; Packed sprite/glyph data indexed as L1364 + 2*r1 by L0840. L1364: .byte $F6, $DE, $59, $2E, $E7, $CE, $E7, $9E, $B7, $92, $F3, $9E, $F3, $DE, $E5, $24 ; 1364 .byte $F7, $DE, $F7, $9E, $08, $20 ; 1374 ; Sound-effect table consumed by L088E from $0C6D. L137A: .byte $27, $67, $25, $47, $23, $27, $00 ; 137A ; Sound-effect table consumed by L088E from $0CB2. L1381: .byte $04, $22, $07, $AB, $03, $BB, $08, $CC, $03, $34, $06, $12, $0D, $12, $0D, $12 ; 1381 .byte $00 ; 1391 ; Sound-effect table consumed by L088E from $0EC4. L1392: .byte $37, $6A, $1A, $61, $1B, $6A, $0E, $73, $1D, $73, $0D, $6A, $1D, $73, $0E, $73 ; 1392 .byte $1D, $73, $0E, $73, $1B, $6A, $1D, $73, $10, $82, $20, $82, $0F, $7B, $31, $82 ; 13A2 .byte $24, $90, $2B, $A2, $29, $9D, $24, $90, $20, $82, $1B, $6A, $16, $43, $18, $58 ; 13B2 .byte $0D, $6A, $20, $82, $0E, $73, $1B, $6A, $18, $58, $2B, $43, $00 ; 13C2 ; Sound-effect table consumed by L088E from $0D27. The terminating zero is ; followed by unused ROM fill; retain all bytes to preserve the original image. L13CF: .byte $31, $82, $0F, $7B, $24, $90, $20, $82, $41, $A2, $14, $9D, $31, $AD, $2B, $A2 ; 13CF .byte $36, $B6, $36, $B6, $36, $B6, $36, $B6, $6D, $B6, $00, $FF, $FF, $FF, $FF, $FF ; 13DF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 13EF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 13FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 140F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 141F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 142F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 143F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 144F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 145F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 146F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 147F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 148F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 149F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14AF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14BF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14CF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14DF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14EF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 14FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 150F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 151F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 152F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 153F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 154F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 155F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 156F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 157F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 158F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 159F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15AF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15BF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15CF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15DF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15EF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 15FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 160F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 161F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 162F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 163F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 164F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 165F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 166F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 167F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 168F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 169F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16AF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16BF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16CF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16DF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16EF .byte $FF, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 16FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 170F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 171F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 172F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 173F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 174F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 175F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 176F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 177F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 178F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 179F .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 17AF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 17BF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 17CF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; 17DF .byte $FF, $00, $10, $E9, $1B, $DD, $E5, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 17EF .byte $00 ; 17FF ; Interpreting the last bytes as a five bit alphabet and using ROT24 - it spells PANBLAST, perhaps it means something to someone. IF 0 Smart data report ================= Mode: enabled by -s or /s Memory range: $0800-$17FF Code bytes: 2630 Data bytes: 1466 DCI data roots from reachable code: $1333 from $0E7E $1392 from $0EC4 $135F from $0E1F $1364 from $0840 $1313 from $0DCB $12FB from $0DD8 $1331 from $0BEF $132F from $0BF9 $132D from $0C00 $137A from $0C6D $1251 from $0C97 $1381 from $0CB2 $125D from $0DB3 $135B from $102F $13CF from $0D27 $124D from $1232 $1268 from $08C7 $1297 from $08DA Data intervals emitted as .byte: $0837-$0839 (3 bytes) $0C40-$0C43 (4 bytes) $124D-$17FF (1459 bytes) ENDIF