Added Extracted Source Code

Additionally, reorganized disks
This commit is contained in:
Nathan D Riggs
2021-06-03 22:58:21 -04:00
parent df76400758
commit 8a50f3ff50
370 changed files with 17589 additions and 84994 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 840 KiB

-645
View File
@@ -1,645 +0,0 @@
6000- 4C 38 61 JMP $6138
6003- 00 BRK
6004- 00 BRK
6005- 00 BRK
6006- 00 BRK
6007- 00 BRK
6008- 00 BRK
6009- 00 BRK
600A- 00 BRK
600B- 00 BRK
600C- 00 BRK
600D- 00 BRK
600E- 00 BRK
600F- 00 BRK
6010- 00 BRK
6011- 00 BRK
6012- 00 BRK
6013- 00 BRK
6014- 00 BRK
6015- 00 BRK
6016- 00 BRK
6017- 00 BRK
6018- 00 BRK
6019- 00 BRK
601A- 00 BRK
601B- 00 BRK
601C- 00 BRK
601D- 00 BRK
601E- 00 BRK
601F- 00 BRK
6020- 00 BRK
6021- 00 BRK
6022- 00 BRK
6023- 00 BRK
6024- 00 BRK
6025- 00 BRK
6026- 00 BRK
6027- 00 BRK
6028- 00 BRK
6029- 00 BRK
602A- 00 BRK
602B- 00 BRK
602C- 00 BRK
602D- 00 BRK
602E- 00 BRK
602F- 00 BRK
6030- 00 BRK
6031- 00 BRK
6032- 00 BRK
6033- 00 BRK
6034- 00 BRK
6035- 00 BRK
6036- 00 BRK
6037- 00 BRK
6038- 00 BRK
6039- 00 BRK
603A- 00 BRK
603B- 00 BRK
603C- 00 BRK
603D- 00 BRK
603E- 00 BRK
603F- 00 BRK
6040- 00 BRK
6041- 00 BRK
6042- 00 BRK
6043- 00 BRK
6044- 00 BRK
6045- 00 BRK
6046- 00 BRK
6047- 00 BRK
6048- 00 BRK
6049- 00 BRK
604A- 00 BRK
604B- 00 BRK
604C- 00 BRK
604D- 00 BRK
604E- 00 BRK
604F- 00 BRK
6050- 00 BRK
6051- 00 BRK
6052- 00 BRK
6053- 00 BRK
6054- 00 BRK
6055- 00 BRK
6056- 00 BRK
6057- 00 BRK
6058- 00 BRK
6059- 00 BRK
605A- 00 BRK
605B- 00 BRK
605C- 00 BRK
605D- 00 BRK
605E- 00 BRK
605F- 00 BRK
6060- 00 BRK
6061- 00 BRK
6062- 00 BRK
6063- 00 BRK
6064- 00 BRK
6065- 00 BRK
6066- 00 BRK
6067- 00 BRK
6068- 00 BRK
6069- 00 BRK
606A- 00 BRK
606B- 00 BRK
606C- 00 BRK
606D- 00 BRK
606E- 00 BRK
606F- 00 BRK
6070- 00 BRK
6071- 00 BRK
6072- 00 BRK
6073- 00 BRK
6074- 00 BRK
6075- 00 BRK
6076- 00 BRK
6077- 00 BRK
6078- 00 BRK
6079- 00 BRK
607A- 00 BRK
607B- 00 BRK
607C- 00 BRK
607D- 00 BRK
607E- 00 BRK
607F- 00 BRK
6080- 00 BRK
6081- 00 BRK
6082- 00 BRK
6083- 00 BRK
6084- 00 BRK
6085- 00 BRK
6086- 00 BRK
6087- 00 BRK
6088- 00 BRK
6089- 00 BRK
608A- 00 BRK
608B- 00 BRK
608C- 00 BRK
608D- 00 BRK
608E- 00 BRK
608F- 00 BRK
6090- 00 BRK
6091- 00 BRK
6092- 00 BRK
6093- 00 BRK
6094- 00 BRK
6095- 00 BRK
6096- 00 BRK
6097- 00 BRK
6098- 00 BRK
6099- 00 BRK
609A- 00 BRK
609B- 00 BRK
609C- 00 BRK
609D- 00 BRK
609E- 00 BRK
609F- 00 BRK
60A0- 00 BRK
60A1- 00 BRK
60A2- 00 BRK
60A3- 00 BRK
60A4- 00 BRK
60A5- 00 BRK
60A6- 00 BRK
60A7- 00 BRK
60A8- 00 BRK
60A9- 00 BRK
60AA- 00 BRK
60AB- 00 BRK
60AC- 00 BRK
60AD- 00 BRK
60AE- 00 BRK
60AF- 00 BRK
60B0- 00 BRK
60B1- 00 BRK
60B2- 00 BRK
60B3- 00 BRK
60B4- 00 BRK
60B5- 00 BRK
60B6- 00 BRK
60B7- 00 BRK
60B8- 00 BRK
60B9- 00 BRK
60BA- 00 BRK
60BB- 00 BRK
60BC- 00 BRK
60BD- 00 BRK
60BE- 00 BRK
60BF- 00 BRK
60C0- 00 BRK
60C1- 00 BRK
60C2- 00 BRK
60C3- 00 BRK
60C4- 00 BRK
60C5- 00 BRK
60C6- 00 BRK
60C7- 00 BRK
60C8- 00 BRK
60C9- 00 BRK
60CA- 00 BRK
60CB- 00 BRK
60CC- 00 BRK
60CD- 00 BRK
60CE- 00 BRK
60CF- 00 BRK
60D0- 00 BRK
60D1- 00 BRK
60D2- 00 BRK
60D3- 00 BRK
60D4- 00 BRK
60D5- 00 BRK
60D6- 00 BRK
60D7- 00 BRK
60D8- 00 BRK
60D9- 00 BRK
60DA- 00 BRK
60DB- 00 BRK
60DC- 00 BRK
60DD- 00 BRK
60DE- 00 BRK
60DF- 00 BRK
60E0- 00 BRK
60E1- 00 BRK
60E2- 00 BRK
60E3- 00 BRK
60E4- 00 BRK
60E5- 00 BRK
60E6- 00 BRK
60E7- 00 BRK
60E8- 00 BRK
60E9- 00 BRK
60EA- 00 BRK
60EB- 00 BRK
60EC- 00 BRK
60ED- 00 BRK
60EE- 00 BRK
60EF- 00 BRK
60F0- 00 BRK
60F1- 00 BRK
60F2- 00 BRK
60F3- 00 BRK
60F4- 00 BRK
60F5- 00 BRK
60F6- 00 BRK
60F7- 00 BRK
60F8- 00 BRK
60F9- 00 BRK
60FA- 00 BRK
60FB- 00 BRK
60FC- 00 BRK
60FD- 00 BRK
60FE- 00 BRK
60FF- 00 BRK
6100- 00 BRK
6101- 00 BRK
6102- 00 BRK
6103- 00 BRK
6104- 00 BRK
6105- 00 BRK
6106- 00 BRK
6107- 00 BRK
6108- 00 BRK
6109- 00 BRK
610A- 00 BRK
610B- 00 BRK
610C- 00 BRK
610D- 00 BRK
610E- 00 BRK
610F- 00 BRK
6110- 00 BRK
6111- 00 BRK
6112- 00 BRK
6113- 00 BRK
6114- 00 BRK
6115- 00 BRK
6116- 00 BRK
6117- 00 BRK
6118- 00 BRK
6119- 00 BRK
611A- 00 BRK
611B- 00 BRK
611C- 00 BRK
611D- 00 BRK
611E- 00 BRK
611F- 00 BRK
6120- 00 BRK
6121- 00 BRK
6122- 00 BRK
6123- 00 BRK
6124- 00 BRK
6125- 00 BRK
6126- 00 BRK
6127- 00 BRK
6128- 00 BRK
6129- 00 BRK
612A- 00 BRK
612B- 00 BRK
612C- 00 BRK
612D- 00 BRK
612E- 00 BRK
612F- 00 BRK
6130- 00 BRK
6131- 00 BRK
6132- 00 BRK
6133- 00 BRK
6134- 00 BRK
6135- 00 BRK
6136- 00 BRK
6137- 00 BRK
6138- 4C A6 61 JMP $61A6
613B- 8D 75 61 STA $6175
613E- 8C 76 61 STY $6176
6141- 8E 77 61 STX $6177
6144- A9 00 LDA #$00
6146- A8 TAY
6147- AA TAX
6148- 8D 76 61 STA $6176
614B- F0 11 BEQ $615E
614D- 18 CLC
614E- 6D 75 61 ADC $6175
6151- AA TAX
6152- 98 TYA
6153- 6D 76 61 ADC $6176
6156- A8 TAY
6157- 8A TXA
6158- 0E 75 61 ASL $6175
615B- 2E 76 61 ROL $6176
615E- 4E 77 61 LSR $6177
6161- B0 EA BCS $614D
6163- D0 F3 BNE $6158
6165- 8E 75 61 STX $6175
6168- 8C 77 61 STY $6177
616B- AD 77 61 LDA $6177
616E- AE 75 61 LDX $6175
6171- AC 76 61 LDY $6176
6174- 60 RTS
6175- 00 BRK
6176- 00 BRK
6177- 00 BRK
6178- 00 BRK
6179- 00 BRK
617A- 00 BRK
617B- 00 BRK
617C- 00 BRK
617D- A0 00 LDY #$00
617F- 8C 7A 61 STY $617A
6182- 8C 7C 61 STY $617C
6185- 8E 79 61 STX $6179
6188- 8D 7B 61 STA $617B
618B- A9 00 LDA #$00
618D- A2 08 LDX #$08
618F- 0E 7B 61 ASL $617B
6192- 2A ROL
6193- CD 79 61 CMP $6179
6196- 90 03 BCC $619B
6198- ED 79 61 SBC $6179
619B- 2E 7B 61 ROL $617B
619E- CA DEX
619F- D0 F1 BNE $6192
61A1- AA TAX
61A2- AD 7B 61 LDA $617B
61A5- 60 RTS
61A6- A0 01 LDY #$01
61A8- 8C ED 63 STY $63ED
61AB- 84 19 STY $19
61AD- A0 FF LDY #$FF
61AF- A2 D8 LDX #$D8
61B1- AD ED 63 LDA $63ED
61B4- 20 7E 63 JSR $637E
61B7- A4 19 LDY $19
61B9- 20 33 63 JSR $6333
61BC- C3 ???
61BD- BB ???
61BE- D7 ???
61BF- C8 INY
61C0- CF ???
61C1- CC C5 8D CPY $8DC5
61C4- 8D 00 20 STA $2000
61C7- 54 ???
61C8- 63 ???
61C9- 84 19 STY $19
61CB- A0 E3 LDY #$E3
61CD- A2 D8 LDX #$D8
61CF- AD ED 63 LDA $63ED
61D2- 20 7E 63 JSR $637E
61D5- A4 19 LDY $19
61D7- 20 33 63 JSR $6333
61DA- C4 A0 CPY $A0
61DC- D7 ???
61DD- C8 INY
61DE- CF ???
61DF- CC C5 8D CPY $8DC5
61E2- 8D 00 20 STA $2000
61E5- 54 ???
61E6- 63 ???
61E7- 84 19 STY $19
61E9- A0 CA LDY #$CA
61EB- A2 D8 LDX #$D8
61ED- AD ED 63 LDA $63ED
61F0- 20 7E 63 JSR $637E
61F3- A4 19 LDY $19
61F5- 20 33 63 JSR $6333
61F8- C5 A0 CMP $A0
61FA- D7 ???
61FB- C8 INY
61FC- CF ???
61FD- CC C5 8D CPY $8DC5
6200- 8D 00 20 STA $2000
6203- 54 ???
6204- 63 ???
6205- 84 19 STY $19
6207- A0 BF LDY #$BF
6209- A2 D8 LDX #$D8
620B- AD ED 63 LDA $63ED
620E- 20 7E 63 JSR $637E
6211- A4 19 LDY $19
6213- 20 33 63 JSR $6333
6216- C6 A0 DEC $A0
6218- D7 ???
6219- C8 INY
621A- CF ???
621B- CC C5 8D CPY $8DC5
621E- 8D 00 20 STA $2000
6221- 54 ???
6222- 63 ???
6223- 84 19 STY $19
6225- A0 AA LDY #$AA
6227- A2 D8 LDX #$D8
6229- AD ED 63 LDA $63ED
622C- 20 7E 63 JSR $637E
622F- A4 19 LDY $19
6231- 20 33 63 JSR $6333
6234- C7 ???
6235- A0 D7 LDY #$D7
6237- C8 INY
6238- CF ???
6239- CC C5 8D CPY $8DC5
623C- 8D 00 20 STA $2000
623F- 54 ???
6240- 63 ???
6241- 84 19 STY $19
6243- A0 98 LDY #$98
6245- A2 D8 LDX #$D8
6247- AD ED 63 LDA $63ED
624A- 20 7E 63 JSR $637E
624D- A4 19 LDY $19
624F- 20 33 63 JSR $6333
6252- C1 A0 CMP ($A0,X)
6254- D7 ???
6255- C8 INY
6256- CF ???
6257- CC C5 8D CPY $8DC5
625A- 8D 00 20 STA $2000
625D- 54 ???
625E- 63 ???
625F- 84 19 STY $19
6261- A0 87 LDY #$87
6263- A2 D8 LDX #$D8
6265- AD ED 63 LDA $63ED
6268- 20 7E 63 JSR $637E
626B- A4 19 LDY $19
626D- 20 33 63 JSR $6333
6270- C2 ???
6271- A0 D7 LDY #$D7
6273- C8 INY
6274- CF ???
6275- CC C5 8D CPY $8DC5
6278- 8D 00 20 STA $2000
627B- 54 ???
627C- 63 ???
627D- EE ED 63 INC $63ED
6280- AD ED 63 LDA $63ED
6283- C9 05 CMP #$05
6285- F0 03 BEQ $628A
6287- 4C AB 61 JMP $61AB
628A- 4C D0 03 JMP $03D0
628D- 00 BRK
628E- 00 BRK
628F- 00 BRK
6290- 00 BRK
6291- 00 BRK
6292- 00 BRK
6293- 00 BRK
6294- 00 BRK
6295- 00 BRK
6296- 00 BRK
6297- B0 B1 BCS $624A
6299- B2 B3 LDA ($B3)
629B- B4 B5 LDY $B5,X
629D- B6 B7 LDX $B7,Y
629F- B8 CLV
62A0- B9 C1 C2 LDA $C2C1,Y
62A3- C3 ???
62A4- C4 C5 CPY $C5
62A6- C6 85 DEC $85
62A8- 06 86 ASL $86
62AA- 07 ???
62AB- A0 FF LDY #$FF
62AD- C8 INY
62AE- B9 38 60 LDA $6038,Y
62B1- 91 06 STA ($06),Y
62B3- CC 37 60 CPY $6037
62B6- D0 F5 BNE $62AD
62B8- 60 RTS
62B9- 29 F0 AND #$F0
62BB- 4A LSR
62BC- 4A LSR
62BD- 4A LSR
62BE- 4A LSR
62BF- 60 RTS
62C0- 8C 8F 62 STY $628F
62C3- 85 06 STA $06
62C5- 86 07 STX $07
62C7- A9 8D LDA #$8D
62C9- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62CC- A5 07 LDA $07
62CE- 20 B9 62 JSR $62B9
62D1- AA TAX
62D2- BD 97 62 LDA $6297,X
62D5- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62D8- A5 07 LDA $07
62DA- 29 0F AND #$0F
62DC- AA TAX
62DD- BD 97 62 LDA $6297,X
62E0- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62E3- A5 06 LDA $06
62E5- 20 B9 62 JSR $62B9
62E8- AA TAX
62E9- BD 97 62 LDA $6297,X
62EC- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62EF- A5 06 LDA $06
62F1- 29 0F AND #$0F
62F3- AA TAX
62F4- BD 97 62 LDA $6297,X
62F7- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62FA- A9 BA LDA #$BA
62FC- 20 F0 FD JSR $FDF0 F8ROM:COUT1
62FF- A9 A0 LDA #$A0
6301- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6304- A0 00 LDY #$00
6306- B1 06 LDA ($06),Y
6308- 20 B9 62 JSR $62B9
630B- 8D 8E 62 STA $628E
630E- B1 06 LDA ($06),Y
6310- 29 0F AND #$0F
6312- 8D 8D 62 STA $628D
6315- AE 8E 62 LDX $628E
6318- BD 97 62 LDA $6297,X
631B- 20 F0 FD JSR $FDF0 F8ROM:COUT1
631E- AE 8D 62 LDX $628D
6321- BD 97 62 LDA $6297,X
6324- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6327- A9 A0 LDA #$A0
6329- 20 F0 FD JSR $FDF0 F8ROM:COUT1
632C- C8 INY
632D- CC 8F 62 CPY $628F
6330- D0 D4 BNE $6306
6332- 60 RTS
6333- 68 PLA
6334- 85 06 STA $06
6336- 68 PLA
6337- 85 07 STA $07
6339- A0 01 LDY #$01
633B- B1 06 LDA ($06),Y
633D- F0 06 BEQ $6345
633F- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6342- C8 INY
6343- D0 F6 BNE $633B
6345- 18 CLC
6346- 98 TYA
6347- 65 06 ADC $06
6349- 85 06 STA $06
634B- A5 07 LDA $07
634D- 69 00 ADC #$00
634F- 48 PHA
6350- A5 06 LDA $06
6352- 48 PHA
6353- 60 RTS
6354- AD 00 C0 LDA $C000 r:KBD w:CLR80COL
6357- 10 FB BPL $6354
6359- 29 7F AND #$7F
635B- 8D 10 C0 STA $C010 r:KBDSTRB
635E- 60 RTS
635F- A9 01 LDA #$01
6361- 8D B6 AA STA $AAB6
6364- 85 76 STA $76
6366- 85 33 STA $33
6368- 85 06 STA $06
636A- 86 07 STX $07
636C- A9 FF LDA #$FF
636E- 85 D8 STA $D8
6370- A0 00 LDY #$00
6372- B1 06 LDA ($06),Y
6374- 8D 5A 9D STA $9D5A
6377- C8 INY
6378- B1 06 LDA ($06),Y
637A- 8D 5B 9D STA $9D5B
637D- 60 RTS
637E- 8D 27 60 STA $6027
6381- 8E 24 60 STX $6024
6384- 8C 25 60 STY $6025
6387- A9 00 LDA #$00
6389- 8D 23 60 STA $6023
638C- AE 27 60 LDX $6027
638F- AD 25 60 LDA $6025
6392- 20 7D 61 JSR $617D
6395- 8D 25 60 STA $6025
6398- 8A TXA
6399- 18 CLC
639A- 6D 25 60 ADC $6025
639D- 8D 25 60 STA $6025
63A0- A9 FF LDA #$FF
63A2- 38 SEC
63A3- ED 25 60 SBC $6025
63A6- 18 CLC
63A7- 6D 24 60 ADC $6024
63AA- 8D 24 60 STA $6024
63AD- AD 23 60 LDA $6023
63B0- 69 00 ADC #$00
63B2- 8D 23 60 STA $6023
63B5- AC 27 60 LDY $6027
63B8- AC 24 60 LDY $6024
63BB- AD 23 60 LDA $6023
63BE- AE 27 60 LDX $6027
63C1- 20 3B 61 JSR $613B
63C4- 8C 24 60 STY $6024
63C7- 8E 23 60 STX $6023
63CA- A9 00 LDA #$00
63CC- A2 00 LDX #$00
63CE- AC 25 60 LDY $6025
63D1- 2C 30 C0 BIT $C030 rw:SPKR
63D4- 88 DEY
63D5- D0 FD BNE $63D4
63D7- AD 24 60 LDA $6024
63DA- 38 SEC
63DB- E9 01 SBC #$01
63DD- 8D 24 60 STA $6024
63E0- AD 23 60 LDA $6023
63E3- E9 00 SBC #$00
63E5- 8D 23 60 STA $6023
63E8- B0 E0 BCS $63CA
63EA- 90 00 BCC $63EC
63EC- 60 RTS
63ED- 05 00 ORA $00
-3
View File
@@ -1,3 +0,0 @@
BLOAD MAKEEXEC
CALL -151
6000G
-3
View File
@@ -1,3 +0,0 @@
BLOAD MINIFY
CALL -151
7000G
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+139 -57
View File
@@ -1,86 +1,168 @@
*
*``````````````````````````````*
* DEMO.LORES *
* DEMO.SPEAKER.ASM *
* *
* A DEMO OF THE MACROS AND *
* SUBROUTINES FOR USING LORES *
* GRAPHICS. *
* A DEMONSTRATION OF HOW TO *
* USE THE VARIOUS MACROS IN *
* THE SPEAKER COLLECTION. *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 03-OCT-2019 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* DATE: 03-JUN-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP OFF
TR ON
DSK DEMO.SPEAKER
OBJ $BFE0
ORG $6000
OBJ $BFE0
*
PUT MIN.HEAD.REQUIRED.ASM
USE MIN.MAC.REQUIRED.ASM
PUT MIN.HEAD.SPEAKER.ASM
USE MIN.MAC.SPEAKER.ASM
*
*``````````````````````````````*
* TOP INCLUDES (PUTS, MACROS) *
* PLAYING A FREQUENCY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT MIN.HEAD.REQUIRED
USE MIN.MAC.REQUIRED
USE MAC.SPEAKER
PUT HOOKS.SPEAKER
** THE PFREQ MACRO PLAYS A FREQUENCY AT THE
** SPECIFIED PITCH AND DURATION. NOTE THAT
** THIS IS NOT ATTACHED TO PLAYING A SONG
** SEQUENCE, NOR DOES IT ACCEPT THE NOTE AND
** DURATION OFFSETS MEANT FOR PLAYING SONGS.
*
PFREQ #195;#141
PFREQ #174;#141
PFREQ #155;#141
PFREQ #146;#141
PFREQ #130;#141
PFREQ #116;#141
PFREQ #103;#141
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
* PLAYING A TONE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
LDY #1
STY ]O
:RPT
PTONE #OCT1_C;#WHOLE;]O
_PRN "C;WHOLE",8D8D
_WAIT
PTONE #OCT1_D;#WHOLE;]O
_PRN "D WHOLE",8D8D
_WAIT
PTONE #OCT1_E;#WHOLE;]O
_PRN "E WHOLE",8D8D
_WAIT
PTONE #OCT1_F;#WHOLE;]O
_PRN "F WHOLE",8D8D
_WAIT
PTONE #OCT1_G;#WHOLE;]O
_PRN "G WHOLE",8D8D
_WAIT
PTONE #OCT1_A;#WHOLE;]O
_PRN "A WHOLE",8D8D
_WAIT
PTONE #OCT1_B;#WHOLE;]O
_PRN "B WHOLE",8D8D
_WAIT
** THE PTONE MACRO PLAYS A TONE OUTSIDE OF
** PLAYING NOTES IN A SONG. THIS USES THE NOTE
** AND DURATION OFFSETS NORMALLY USED BY SONG-PLAYING
** FUNCTIONS.
*
INC ]O
LDA ]O
CMP #5
BEQ :EXIT
JMP :RPT
*
:EXIT
JMP REENTRY
PTONE #NIND_C1;#DIND_W
PTONE #NIND_D1;#DIND_W
PTONE #NIND_E1;#DIND_W
PTONE #NIND_F1;#DIND_W
PTONE #NIND_G1;#DIND_W
PTONE #NIND_A2;#DIND_W
PTONE #NIND_B2;#DIND_W
*
*``````````````````````````````*
* BOTTOM INCLUDES *
* PLAYING SONGS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** BOTTOM INCLUDES
** THE STMPO MACRO SETS THE TEMPO FOR A SONG. THIS
** CHANGES THE DURATIONS OF NOTES AS WELL.
*
PUT MIN.LIB.REQUIRED
STMPO #$09
*
** INDIVIDUAL SUBROUTINE INCLUDES
** THE SSONG MACRO SETS THE ADDRESS OF THE SONG TO
** BE PLAYED.
*
PUT SUB.PLAYTONE
SSONG #SCALE
*
]O DB #5
** THE PNOTE MACRO PLAYS THE NOTE CURRENTLY INDEXED
** IN A SONG SET BY THE SSONG MACRO.
*
PNOTE
*
** THE NEXTN ADVANCES THE SONG BY A SINGLE NOTE.
*
NEXTN
PNOTE
NEXTN
PNOTE
NEXTN
PNOTE
NEXTN
PNOTE
NEXTN
PNOTE
NEXTN
PNOTE
NEXTN
*
** THE PREVN MACRO MOVES THE SONG NOTE POINTER ONE
** NOTE BACKWARDS.
*
PREVN
PNOTE
PREVN
PNOTE
PREVN
PNOTE
PREVN
PNOTE
PREVN
PNOTE
PREVN
PNOTE
PREVN
PNOTE
*
** THE FFWRD MACRO AND THE REWND MACRO MOVE THE SONG
** POINTER A SPECIFIED NUMBER OF NOTES FORWARDS OR
** BACKWARD.
*
FFWRD #2
PNOTE
REWND #2
PNOTE
*
** THE RSTRT MACRO SETS THE NOTE INDEX OF A SONG
** BACK TO THE FIRST NOTE.
*
RSTRT
*
** THE PSONG MACRO PLAYS A SONG FROM BEGINNING TO END.
*
PSONG
*
*``````````````````````````````*
* PLAYING SOUND EFFECTS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** THE SFX MACRO PLAYS ONE OF A NUMBER OF DIFFERENT
** STANDARDIZED SOUND EFFECTS. WHILE THE SELECTION IS
** SMALL NOW, MORE WILL BE ADDED IN A FUTURE DEDICATED
** UPDATE TO THE SPEAKER COLLECTION.
*
SFX #0;#10;#0
SFX #1;#1;#160
SFX #2;#1;#176
SFX #3;#12;#6
*
JSR $3D0
*
PUT MIN.LIB.REQUIRED.ASM
PUT MIN.SUB.PLAYNOTE.ASM
PUT MIN.SUB.SOUNDFX.ASM
*
SCALE DFB NIND_D1S,DIND_W
DFB NIND_C1,DIND_D8
DFB NIND_D1,DIND_D8
DFB NIND_D1S,DIND_D8
DFB NIND_E1,DIND_D8
DFB NIND_F1,DIND_H
DFB NIND_D1S,DIND_H
DFB NIND_D1,DIND_D8
DFB NIND_D1S,DIND_D8
DFB NIND_F1,DIND_D8
DFB NIND_G1S,DIND_D8
DFB NIND_G1,DIND_W
DFB NIND_END,NIND_END
+285
View File
@@ -0,0 +1,285 @@
*
*``````````````````````````````*
* HEAD.SPEAKER.ASM *
* *
* THIS HEADER FILE HOLDS A *
* NUMBER OF DIFFERENT HOOKS, *
* VECTORS, SUBROUTINES AND *
* MEMORY LOCATIONS FOR USE BY *
* THE SPEAKER COLLECTION. *
* *
* MANY OF THESE INDIRECTLY *
* COME FROM DON LANCASTER'S *
* /ASSEMBLY COOKBOOK FOR THE *
* APPLE II/IIE/ AND THE FAMOUS *
* RED BOOK. *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 03-JUN-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* *
* SIZE: 198 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SPKR EQU $C030 ; SPEAKER SOFT SWITCH
TAPEOUT EQU $C020 ; TAPE OUT SOFT SWITCH; UNUSED IN IIE
NWAIT EQU $FCA8 ; MONITOR WAIT SUBROUTINE
*
** THE FOLLOWING IS A LIST OF INDICES FOR
** EACH NOTE IN THE NOTE TABLE.
*
NIND_END EQU 000 ; END OF SONG, USE TWICE
NIND_A1 EQU 001 ; NOTE A BELOW MID C
NIND_A1S EQU 002 ; A#
NIND_B1F EQU 003 ; B FLAT
NIND_B1 EQU 004 ; B
NIND_C1 EQU 005 ; C
NIND_C1S EQU 006 ; C#
NIND_D1F EQU 007 ; D FLAT
NIND_D1 EQU 008 ; D
NIND_D1S EQU 009 ; D#
NIND_E1F EQU 010 ; E FLAT
NIND_E1 EQU 011 ; E
NIND_F1 EQU 012 ; F
NIND_F1S EQU 013 ; F#
NIND_G1F EQU 014 ; G FLAT
NIND_G1 EQU 015 ; G
NIND_G1S EQU 016 ; G#
NIND_A1F EQU 017 ; A FLAT
NIND_A2 EQU 018 ; NOTE A ABOVE MID C
NIND_A2S EQU 019 ; A#
NIND_B2F EQU 020 ; B FLAT
NIND_B2 EQU 021 ; B
NIND_C2 EQU 022 ; C
NIND_C2S EQU 023 ; C#
NIND_D2F EQU 024 ; D FLAT
NIND_D2 EQU 025 ; D
NIND_D2S EQU 026 ; D#
NIND_E2F EQU 027 ; E FLAT
NIND_E2 EQU 028 ; E
NIND_F2 EQU 029 ; F
NIND_F2S EQU 030 ; F#
NIND_G2F EQU 031 ; G FLAT
NIND_G2 EQU 032 ; G
NIND_G2S EQU 033 ; G#
NIND_A2F EQU 034 ; A FLAT
NIND_A3 EQU 035 ; SECOND A ABOVE MID C
NIND_R EQU 036 ; SILENT OR REST
*
** THE FOLLOWING IS A LIST OF INDICES TO
** THE NOTE DURATIONS IN THE DURATION TABLE
*
DIND_64 EQU 00 ; 64TH NOTE
DIND_32 EQU 01 ; 32ND NOTE
DIND_16 EQU 02 ; 16TH NOTE
DIND_D16 EQU 03 ; DOTTED 16TH
DIND_8 EQU 04 ; 8TH NOTE
DIND_D8 EQU 05 ; DOTTED 8TH
DIND_4 EQU 06 ; 1/4 NOTE
DIND_D4 EQU 07 ; DOTTED 1/4
DIND_H EQU 08 ; HALF NOTE
DIND_DH EQU 09 ; DOTTED HALF NOTE
DIND_W EQU 10 ; WHOLE NOTE
*
JMP _SKIPSPKR
*
** THE FOLLOWING TABLE OF NOTES STORES THE
** "MAGIC" NUMBERS FOR EACH NOTE FREQUENCY
*
NOTETBL
*
NOTE_END DFB $00 ; {0C1B} END OF SONG, USE TWICE
NOTE_A1 DFB 232 ; {0C1B} NOTE A BELOW MID C
NOTE_A1S DFB 219 ; {0C1B} A#
NOTE_B1F DFB 219 ; {0C1B} B FLAT
NOTE_B1 DFB 207 ; {0C1B} B
NOTE_C1 DFB 195 ; {0C1B} C
NOTE_C1S DFB 184 ; {0C1B} C#
NOTE_D1F DFB 184 ; {0C1B} D FLAT
NOTE_D1 DFB 174 ; {0C1B} D
NOTE_D1S DFB 164 ; {0C1B} D#
NOTE_E1F DFB 164 ; {0C1B} E FLAT
NOTE_E1 DFB 155 ; {0C1B} E
NOTE_F1 DFB 146 ; {0C1B} F
NOTE_F1S DFB 138 ; {0C1B} F#
NOTE_G1F DFB 138 ; {0C1B} G FLAT
NOTE_G1 DFB 130 ; {0C1B} G
NOTE_G1S DFB 123 ; {0C1B} G#
NOTE_A1F DFB 123 ; {0C1B} A FLAT
NOTE_A2 DFB 116 ; {0C1B} NOTE A ABOVE MID C
NOTE_A2S DFB 110 ; {0C1B} A#
NOTE_B2F DFB 110 ; {0C1B} B FLAT
NOTE_B2 DFB 103 ; {0C1B} B
NOTE_C2 DFB 98 ; {0C1B} C
NOTE_C2S DFB 92 ; {0C1B} C#
NOTE_D2F DFB 92 ; {0C1B} D FLAT
NOTE_D2 DFB 87 ; {0C1B} D
NOTE_D2S DFB 82 ; {0C1B} D#
NOTE_E2F DFB 82 ; {0C1B} E FLAT
NOTE_E2 DFB 78 ; {0C1B} E
NOTE_F2 DFB 73 ; {0C1B} F
NOTE_F2S DFB 69 ; {0C1B} F#
NOTE_G2F DFB 69 ; {0C1B} G FLAT
NOTE_G2 DFB 65 ; {0C1B} G
NOTE_G2S DFB 61 ; {0C1B} G#
NOTE_A2F DFB 61 ; {0C1B} A FLAT
NOTE_A3 DFB 58 ; {0C1B} SECOND A ABOVE MID C
NOTE_R DFB $FF ; {0C1B} SILENT OR REST
*
** THE FOLLOWING TABLE HOLDS THE DURATION
** VALUES FOR A NOTE. THESE ARE SET BY THE
** SETTEMPO SUBROUTINE.
*
DURTBL
*
DUR_64 DFB 02 ; {0C1B} 64TH NOTE -- TEMPO / 4
DUR_32 DFB 04 ; {0C1B} 32ND NOTE -- TEMPO / 2
DUR_16 DFB 09 ; {0C1B} 16TH NOTE -- TEMP0 * 1
DUR_D16 DFB 13 ; {0C1B} DOTTED 16TH -- S/2+S
DUR_8 DFB 18 ; {0C1B} 8TH NOTE -- TEMPO * 2
DUR_D8 DFB 24 ; {0C1B} DOTTED 8TH -- TEMPO * 3
DUR_4 DFB 32 ; {0C1B} 1/4 NOTE -- TEMPO * 4
DUR_D4 DFB 54 ; {0C1B} DOTTED 1/4 -- TEMPO * 6
DUR_H DFB 72 ; {0C1B} HALF NOTE -- TEMPO * 8
DUR_DH DFB 108 ; {0C1B} DOTTED HALF NOTE -- TEMPO * 12
DUR_W DFB 144 ; {0C1B} WHOLE NOTE -- TEMPO * 16
*
TEMPO DFB $09 ; {0C1B} MASTER TEMPO CONTROL ($0F MAX)
TEMPMUL DFB $80 ; {0C1B} TEMPO MULT (00=X1 $80=X2 $40=X4)
NPAUSE DFB $48 ; {0C1B} INTERNOTE PAUSE TIME
*
** THE FOLLOWING ARE USED BY THE REDTONE PLAYER.
** THESE ARE SET BEFORE PLAYING EACH NOTE.
*
NOTEP DFB 00,00 ; {0C2B} CURRENT ADDRESS IN SONG
DURAT DFB $72 ; {0C1B} DURATION GOES HERE
DURCNT DFB $72 ; {0C1B} GETS COUNTED HERE
DURMUL DFB $80 ; {0C1B} DURATION MULTIPLIER
PITCH DFB $72 ; {0C1B} PITCH GOES HERE
*
SONGLOC DFB 00,00 ; {0C2B} LOW,HIGH OF SONG ADDRESS
*
*``````````````````````````````*
* REDTONE *
* *
* PLAY A SQUARE WAVE AT THE *
* GIVEN FREQUENCY AND FOR A *
* GIVEN DURATION. NOTE THAT *
* THIS IS A VERY COMMON *
* SUBROUTINE, AND I DID NOT *
* WRITE IT. THIS COMES FROM *
* THE FAMOUS APPLE II REDBOOK, *
* WITH SOME MINOR MODIFICATION *
* BY DON LANCASTER. *
* *
* INPUT *
* *
* NONE *
* *
* DESTROY: NZCIDV *
* ^^^ ^ *
* *
* CYCLES: 194+ *
* SIZE: 51 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
REDTONE PHA ; {3C1B} SAVE REGISTERS
TYA ; {2C1B}
PHA ; {3C1B}
TXA ; {2C1B}
PHA ; {3C1B}
LDA DURAT ; {4C3B} MOVE DURATION VALUE TO
STA DURCNT ; {4C3B} COUNTABLE LOCATION
LDY #$00 ; {3C2B} INIT FAST DURATION COUNTER
TYA ; {2C1B} INIT DURATION MULTIPLIER
:WHAP LDX PITCH ; {4C3B} GET PITCH VALUE
CPX #$FF ; {3C2B} IS IT SILENT?
BEQ :LOCKX ; {3C2B} YES, KEEP IT SILENT
BIT SPKR ; {3C2B} WHAP SPEAKER
:NOWHAP DEY ; {2C1B} DECREMENT FAST DURATION COUNT
BNE :NOC5 ; {3C2B} IF NO BORROW
CLC ; {2C1B}
ADC DURMUL ; {4C3B} DURATION MULTIPLIER
BNE :NOC5 ; {3C2B} IGNORE ALL BUT ZERO RESULTS
DEC DURCNT ; {6C3B} DECREMENT SLOW DURATION
BEQ :EXITRED ; {3C2B} IF FINISHED
:NOC5 DEX ; {2C1B} DECREMENT PITCH VALUE
BNE :NOWHAP ; {3C2B} PITCH NOT DONE
BEQ :WHAP ; {3C2B} PITCH DONE, ALWAYS TAKEN
:LOCKX INX ; {2C1B} TRAP X TO $FF
BEQ :NOWHAP ; {3C2B} ALWAYS TAKEN
:EXITRED PLA ; {3C1B} RESTORE REGISTERS
TAX ; {2C1B}
PLA ; {3C1B}
TAY ; {2C1B}
PLA ; {3C1B}
RTS ; {6C1B} AND EXIT
*
*``````````````````````````````*
* SETTEMPO *
* *
* SETS THE TEMPO, INCLUDING *
* ALTERING THE DURATIONS OF *
* NOTES. *
* *
* INPUT: *
* *
* .A = TEMPO *
* *
* DESTROY: NZCIDV *
* ^^^ ^ *
* *
* CYCLES: 230 *
* SIZE: 84 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SETTEMPO
STA TEMPO ; {4C3B} STORE TEMPO
LSR ; {2C1B} DIVIDE BY TWO
STA DUR_32 ; {4C3B} = TEMPO / 2
LSR ; {2C1B} DIVIDE BY 2 AGAIN
STA DUR_64 ; {4C3B} = TEMPO / 4
LDA TEMPO ; {4C3B}
STA DUR_16 ; {4C3B} = TEMPO
LSR ; {2C1B} DIV BY 2
CLC ; {2C1B}
ADC TEMPO ; {4C3B} ADD 16TH
STA DUR_D16 ; {4C3B} = 1.5 * 16TH
LDA TEMPO ; {4C3B}
ASL ; {2C1B} MUL BY 2
STA DUR_8 ; {4C3B} = TEMPO * 2
LSR ; {2C1B} DIV BY 2
CLC ; {2C1B}
ADC DUR_8 ; {4C3B} ADD 8TH
STA DUR_D8 ; {4C3B} = 1.5 * 8TH
LDA TEMPO ; {4C3B}
ASL ; {2C1B} MUL BY 2
ASL ; {2C1B} BY 4
STA DUR_4 ; {4C3B} = TEMPO * 4
LSR ; {2C1B} DIV BY 2
CLC ; {2C1B}
ADC DUR_4 ; {4C3B} ADD 1/4 NOTE
STA DUR_D4 ; {4C3B} = 1.5 * 1/4TH NOTE
LDA TEMPO ; {4C3B}
ASL ; {2C1B} MUL BY TWO
ASL ; {2C1B} BY 4
ASL ; {2C1B} BY 8
STA DUR_H ; {4C3B} = TEMPO * 8
LSR ; {2C1B} DIV BY 2
CLC ; {2C1B}
ADC DUR_H ; {4C3B} ADD HALF NOTE
STA DUR_DH ; {4C3B} = 1.5 * HALF NOTE
LDA TEMPO ; {4C3B}
ASL ; {2C1B} MUL BY 2
ASL ; {2C1B} BY 4
ASL ; {2C1B} BY 8
ASL ; {2C1B} BY 16
STA DUR_W ; {4C3B} = TEMPO * 16
RTS ; {6C1B}
*
_SKIPSPKR
*
-93
View File
@@ -1,93 +0,0 @@
SPKR EQU $C030
*
** THESE NOTE VALUES ARE IN OCTAVE ONE.
** ROUGHLY DIVIDE IN HALF TO GO UP AN OCTAVE.
*
OCT1_C EQU $FF ; C (255)
OCT1_CS EQU $F1 ; C# (241)
OCT1_DF EQU $F1 ; Db (241)
OCT1_D EQU $E3 ; D (227)
OCT1_DS EQU $D6 ; D# (214)
OCT1_EF EQU $D6 ; Eb (214)
OCT1_E EQU $CA ; E (202)
OCT1_F EQU $BF ; F (191)
OCT1_FS EQU $B4 ; F# (180)
OCT1_GF EQU $B4 ; Gb (180)
OCT1_G EQU $AA ; G (170)
OCT1_GS EQU $A1 ; G# (161)
OCT1_AF EQU $A1 ; Ab (161)
OCT1_A EQU $98 ; A (152)
OCT1_AS EQU $8F ; A# (143)
OCT1_BF EQU $8F ; Bb (143)
OCT1_B EQU $87 ; B (135)
OCT1_PAU EQU $0 ; NO SOUND
*
*
** THESE REPRESENT THE NOTE DURATION VALUES
*
WHOLE EQU 216 ; WHOLE NOTE (216*5)
HALF EQU 108 ; HALF NOTE DURATION (108*5)
QUARTER EQU 54 ; QUARTER NOTE (54*5)
SIXTNTH EQU 27 ; 1/16 NOTE (27*5)
THRTY2ND EQU 14 ; 1/32 NOTE (14*5)
SIXT4TH EQU 7 ; 1/64 NOTE (7*5)
*
JMP _SPKEXIT
*
MULOCT
STA ]MUL1
STY ]MUL1+1
STX ]MUL2
LDA #0 ; CLEAR REGISTERS
TAY
TAX
STA ]MUL1+1 ; CLEAR HIBYTE
BEQ :GOLOOP
:DOADD
CLC ; CLEAR CARRY
ADC ]MUL1 ; ADD MULTIPLIER
TAX ; HOLD IN .Y
TYA ; XFER .X TO .A
ADC ]MUL1+1 ; ADD MULTIPLIER HIBYTE
TAY ; HOLD BACK IN .X
TXA ; MOVE LOBYTE INTO .A
:LP
ASL ]MUL1 ; SHIFT LEFT
ROL ]MUL1+1 ; ROLL HIBYTE
:GOLOOP
LSR ]MUL2 ; SHIFT MULTIPLIER
BCS :DOADD ; IF 1 SHIFTED INTO CARRY, ADD AGAIN
BNE :LP ; OTHERWISE, LOP
STX ]MUL1 ; STORE LOBYTE
STY ]MUL2 ; STORE HIBYTE
LDA ]MUL2 ; LOBYTE TO .A
LDX ]MUL1 ; HIBYTE TO .X
LDY ]MUL1+1
RTS
]MUL1 DS 2,0
]MUL2 DS 2,0
*
*
*
]DVEND DS 2,0
]DVSOR DS 2,0
DIVOCT
LDY #0
STY ]DVEND+1
STY ]DVSOR+1
STX ]DVEND ; .X HOLDS DIVIDEND
STA ]DVSOR ; .A HOLDS DIVISOR
LDA #$00 ; CLEAR ACCUMULATOR
LDX #8 ; COUNTER
ASL ]DVSOR ; SHIFT LEFT DIVISOR
:L1 ROL ; ROTATE LEFT .A
CMP ]DVEND ; COMPARE TO DIVIDEND
BCC :L2 ; IF NEXT BIT = 0, BRANCH :L2
SBC ]DVEND ; OTHERWISE, SUBTRACT DIVIDEND
:L2 ROL ]DVSOR ; ROTATE LEFT DIVISOR
DEX ; DECREMENT COUNTER
BNE :L1 ; IF > 0, LOOP
TAX ; REMAINDER IN .X
LDA ]DVSOR ; RESULT IN .A
RTS
_SPKEXIT
+295 -68
View File
@@ -1,99 +1,326 @@
*
*``````````````````````````````*
* MAC.SPEAKER *
* *
* THIS IS A MACRO LIBRARY FOR *
* THE SPEAKER COLLECTION. *
* THESE ARE REQUIRED FOR MUCH *
* OF THE COLLECTION TO WORK. *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 03-JUN-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* *
* SUBROUTINES USED *
* *
* *
* LIST OF MACROS *
* *
* STMPO : SET TEMPO *
* PNOTE : PLAY SONG NOTE *
* SSONG : SET SONG ADDRESS *
* NEXTN : MOVE TO NEXT NOTE *
* PREVN : MOVE TO PREV NOTE *
* RSTRT : MOVE TO FIRST NOTE *
* FFRWD : JUMP AHEAD X NOTES *
* REWND : JUMP BACK X NOTES *
* PTONE : PLAY A TONE--NO SONG *
* PFREQ : PLAY A FREQUENCY *
* PSONG : PLAY A WHOLE SONG *
* SFX : PLAY SOUND EFFECT *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* STMPO *
* *
* SET THE PLAYBACK TEMPO. *
* *
* PARAMETERS: *
* *
* ]1 = TEMPO ($0F MAX) *
* *
* CYCLES: 240 *
* SIZE: 6 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
STMPO MAC
LDA ]1 ; {4C3B}
JSR SETTEMPO ; {236C3B}
<<<
*
*``````````````````````````````*
* PNOTE *
* *
* PLAY NOTE ON SPEAKER *
* PLAY THE NOTE THAT IS BEING *
* POINTED TO IN THE SONG. *
* *
* PARAMETERS: *
* *
* NONE *
* *
* CYCLES: 172+ *
* SIZE: 3 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PNOTE MAC
JSR PLAYNOTE {172C3B}
<<<
*
*``````````````````````````````*
* SSONG *
* *
* SET THE SONG TO BE PLAYED. *
* *
* PARAMETERS: *
* *
* ]1 = SONG ADDRESS *
* *
* CYCLES: 48 *
* SIZE: 36 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SSONG MAC
IF #=]1
LDA ]1/$100 ; {4C3B}
STA SONGLOC+1 ; {4C3B}
LDA ]1 ; {4C3B}
STA SONGLOC ; {4C3B}
ELSE
LDA ]1+1 ; {4C3B}
STA SONGLOC+1 ; {4C3B}
LDA ]1 ; {4C3B}
STA SONGLOC ; {4C3B}
FIN
LDA SONGLOC ; {4C3B}
STA NOTEP ; {4C3B}
LDA SONGLOC+1 ; {4C3B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* NEXTN *
* *
* MOVE TO THE NEXT NOTE IN THE *
* CURRENT SONG. *
* *
* PARAMETERS: *
* *
* NONE *
* *
* CYCLES: 24 *
* SIZE: 17 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
NEXTN MAC
LDA NOTEP ; {4C3B}
CLC ; {2C1B}
ADC #2 ; {3C2B}
STA NOTEP ; {4C3B}
LDA NOTEP+1 ; {4C3B}
ADC #0 ; {3C2B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* PREVN *
* *
* MOVE TO THE PREVIOUS NOTE *
* IN THE CURRENT SONG. *
* *
* PARAMETERS: *
* *
* NONE *
* *
* CYCLES: 24 *
* SIZE: 17 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PREVN MAC
LDA NOTEP ; {4C3B}
SEC ; {2C1B}
SBC #2 ; {3C2B}
STA NOTEP ; {4C3B}
LDA NOTEP+1 ; {4C3B}
SBC #0 ; {3C2B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* RSTRT *
* *
* RESET THE SONG POINTER TO *
* POINT TO THE FIRST NOTE. *
* *
* PARAMETERS: *
* *
* NONE *
* *
* CYCLES: 16 *
* SIZE: 2 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
RSTRT MAC
LDA SONGLOC ; {4C3B}
STA NOTEP ; {4C3B}
LDA SONGLOC+1 ; {4C3B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* FFWRD *
* *
* FAST FORWARD THE GIVEN # OF *
* SONG NOTES. *
* *
* PARAMETERS: *
* *
* ]1 = NUMBER OF NOTES *
* *
* CYCLES: 27 *
* SIZE: 19 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
FFWRD MAC
LDA ]1 ; {4C3B}
ASL ; {2C1B}
CLC ; {2C1B}
ADC NOTEP ; {4C3B}
STA NOTEP ; {4C3B}
LDA NOTEP+1 ; {4C3B}
ADC #0 ; {3C2B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* REWND *
* *
* REWIND BY THE GIVEN # OF *
* SONG NOTES. *
* *
* PARAMETERS: *
* *
* ]1 = NUMBER OF NOTES *
* *
* CYCLES: 35 *
* SIZE: 25 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
REWND MAC
LDA ]1 ; {4C3B}
ASL ; {2C1B}
STA SCRATCH ; {4C3B}
LDA NOTEP ; {4C3B}
SEC ; {2C1B}
SBC SCRATCH ; {4C3B}
STA NOTEP ; {4C3B}
LDA NOTEP+1 ; {4C3B}
SBC #0 ; {3C2B}
STA NOTEP+1 ; {4C3B}
<<<
*
*``````````````````````````````*
* PTONE *
* *
* PLAY SPECIFIC TONW ON SPKR *
* PLAY A TONE SEPARATELY FROM *
* BEING INCLUDED IN A SONG. *
* *
* PARAMETERS: *
* *
* ]1 = NOTE CODE *
* ]2 = DURATION CODE *
* *
* CYCLES: 220+ *
* SIZE: 18 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PTONE MAC
STY SCRATCH
LDY ]1
LDX ]2
LDA ]3
JSR PLAYTONE
LDY SCRATCH
LDX ]1 ; {4C3B}
LDA NOTETBL,X ; {5C3B}
STA PITCH ; {4C3B}
LDX ]2 ; {4C3B}
LDA DURTBL,X ; {5C3B}
STA DURAT ; {4C3B}
JSR REDTONE ; {194C0B}
<<<
*
*``````````````````````````````*
* PSINT *
* PFREQ *
* *
* PLAY SONG IN CYCLE INTERVALS *
* PLAY A SQUARE WAVE FREQUENCY *
* APART FROM ANY SONG. *
* *
* PARAMETERS: *
* *
* ]1 = FREQUENCY BYTE *
* ]2 = DURATION BYTE *
* *
* CYCLES: 214+ *
* SIZE: 15 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* PSNG *
* *
* PLAY SONG FROM START TO END *
* WITH NO CYCLE INTERVALS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
PFREQ MAC
LDA ]1 ; {4C3B}
STA PITCH ; {4C3B}
LDA ]2 ; {4C3B}
STA DURAT ; {4C3B}
JSR REDTONE ; {194C3B}
<<<
*
*``````````````````````````````*
* PAUSNG *
* PSONG *
* *
* PAUSE PLAYING OF SONG, EVEN *
* IF PLAYING BY CYCLE INTERVAL *
* PLAY AN ENTIRE SONG SERIES. *
* *
* PARAMETERS: *
* *
* NONE *
* *
* CYCLES: 226+ *
* SIZE: 42 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* RESSNG *
* *
* RESUME SONG PLAYING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* SETSNG *
* *
* SET ADDRESS WHERE SONG *
* STRING TO BE READ IS LOCATED *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* STPSNG *
* *
* STOP SONG FROM PLAYING AND *
* RESET INDEX TO BEGINNING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
PSONG MAC
]LP1
PNOTE ; {172C3B}
LDA NOTEP ; {4C3B}
STA ADDR4 ; {4C3B}
LDA NOTEP+1 ; {4C3B}
STA ADDR4+1 ; {4C3B}
LDY #0 ; {3C2B}
LDA (ADDR4),Y ; {5C3B}
BEQ ]EXITSONG ; {3C2B}
NEXTN ; {24C17B}
JMP ]LP1 ; {3C3B}
]EXITSONG
<<<
*
*``````````````````````````````*
* SFX *
* *
* PLAY A PRESET SOUND EFFECT *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* SPDSNG *
* PLAY A NUMBER OF PREMADE *
* SOUND EFFECTS. MANY OF THESE *
* ALLOW FOR SOME TONAL CONTROL *
* *
* INCREASE OR DECREASE SONG *
* PLAYING SPEED. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* OCTSNG *
* PARAMETERS: *
* *
* INCREASE OR DECREASE SONG *
* OR NOTE OCTAVE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* PCHORD *
* ]1 = SOUND EFFECT TO PLAY *
* ]2 = FIRST VARIABLE *
* ]3 = SECOND VARIABLE *
* *
* PLAY AN ARPEGGIO CHORD. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* SPKENV *
* *
* SET THE INSTRUMENT TO PLAY *
* THE SONG FROM A LIMITED SET *
* OF PREMADE TIMBRES. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*``````````````````````````````*
* TWANG *
* CYCLES: 1962 (NOT ACCURATE) *
* SIZE: 18 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SFX MAC
LDA ]1 ; {4C3B}
STA BPAR1 ; {3C2B}
LDA ]2 ; {4C3B}
STA BPAR2 ; {3C2B}
LDA ]3 ; {4C3B}
STA BPAR3 ; {3C2B}
JSR SOUNDFX ; {1941C3B}
<<<
@@ -1,24 +0,0 @@
JUMPTBL JMP MAIN_START
DS 32
VARTAB DS 20
RETLEN DS 1
RETURN DS 256
ADDR1 EQU $06
ADDR2 EQU $08
ADDR3 EQU $EB
ADDR4 EQU $ED
SCRATCH EQU $19
SCRATCH2 EQU $1E
RETADR EQU $FE
RESULT EQU $FA
RESULT2 EQU $FC
WPAR1 EQU $FA
WPAR2 EQU $FC
WPAR3 EQU $FE
BPAR1 EQU $EF
BPAR2 EQU $E3
BPAR3 EQU $1E
BPAR4 EQU $19
REENTRY EQU $3D0
MAIN_START
-125
View File
@@ -1,125 +0,0 @@
]RIGHT DS 1
]LEFT DS 1
]LENGTH DS 1
]A DS 1
]X DS 1
]Y DS 1
]C DS 1
]Z DS 1
]N DS 1
]O DS 1
]HEXTAB ASC "0123456789ABCDEF"
]COUT EQU $FDF0
]KYBD EQU $C000
]STROBE EQU $C010
__GETRET
STA ADDR1
STX ADDR1+1
LDY #255
:LP
INY
LDA RETURN,Y
STA (ADDR1),Y ; COUNTER OFFSET
CPY RETLEN
BNE :LP
RTS
__CLRHI
AND #$F0
LSR
LSR
LSR
LSR
RTS
__DUMP
STY ]LENGTH
STA ADDR1
STX ADDR1+1
LDA #$8D
JSR ]COUT
LDA ADDR1+1
JSR __CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1+1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
JSR __CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA #":" ;
JSR ]COUT
LDA #" "
JSR ]COUT
LDY #0
:LP
LDA (ADDR1),Y
JSR __CLRHI ; AT COUNTER OFFSET
STA ]LEFT
LDA (ADDR1),Y
AND #$0F
STA ]RIGHT
LDX ]LEFT
LDA ]HEXTAB,X
JSR ]COUT
LDX ]RIGHT
LDA ]HEXTAB,X
JSR ]COUT
LDA #160
JSR ]COUT
INY
CPY ]LENGTH
BNE :LP
RTS
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR ]COUT
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA ; IF NEEDED
LDA ADDR1
PHA
RTS
__W
:LP LDA ]KYBD
BPL :LP
AND #$7F
STA ]STROBE
RTS
__ERRH
LDA #1
STA $AAB6
STA $75+1
STA $33
STA ADDR1
STX ADDR1+1
LDA #$FF
STA $D8
LDY #0
LDA (ADDR1),Y
STA $9D5A
INY
LDA (ADDR1),Y
STA $9D5B
RTS
-97
View File
@@ -1,97 +0,0 @@
_MLIT MAC
IF #=]1
LDA ]1/$100
STA ]2+1
LDA ]1
STA ]2
ELSE
LDA ]1+1
STA ]2+1
LDA ]1
STA ]2
FIN
<<<
_ISLIT MAC
IF #=]1
LDA ]1/$100
PHA
LDA ]1
PHA
ELSE
LDA ]1+1
PHA
LDA ]1
PHA
FIN
<<<
_AXLIT MAC
IF #=]1
LDX ]1/$100
LDA ]1
ELSE
LDX ]1+1
LDA ]1
FIN
<<<
_MSTR MAC
IF "=]1
JMP __STRCONT
]STRTMP STR ]1
__STRCONT
LDA #>]STRTMP
STA ]2+1
LDA #<]STRTMP
STA ]2
ELSE
_ISLIT ]1
FIN
<<<
_ISSTR MAC
IF "=]1
JMP __STRCONT
]STRTMP STR ]1
__STRCONT
LDA #>]STRTMP
PHA
LDA #<]STRTMP
PHA
ELSE
_ISLIT ]1
FIN
<<<
_AXSTR MAC
IF "=]1
JMP __STRCNT2
]STRTMP STR ]1
__STRCNT2
LDX #>]STRTMP
LDA #<]STRTMP
ELSE
_AXLIT ]1
FIN
<<<
GRET MAC
_AXLIT ]1
JSR __GETRET
<<<
DUMP MAC
_AXLIT ]1
LDY ]2
JSR __DUMP
<<<
_PRN MAC
JSR __P
ASC ]1
HEX 00
<<<
_WAIT MAC
JSR __W
<<<
ERRH MAC
_AXLIT
JSR __ERRH
<<<
CLRHI MAC
LDA ]1
JSR __CLRHI
<<<
+43
View File
@@ -0,0 +1,43 @@
*
*``````````````````````````````*
* PLAYNOTE *
* *
* PLAYS THE CURRENT NOTE IN A *
* SONG SEQUENCE, THE ADDRESS *
* BEING PROVIDED BY THE SSONG *
* MACRO. *
* *
* INPUT *
* *
* NONE *
* *
* DESTROY: NZCIDV *
* ^^^ ^ *
* *
* CYCLES: 166+ *
* SIZE: 46 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PLAYNOTE
LDY #$00 ; {3C2B} RESET .Y POINTER
LDA TEMPMUL ; {4C3B} SET TEMPO MULTIPLIER
STA DURMUL ; {4C3B}
LDA NOTEP ; {4C3B} TRANSFER TO ZERO PAGE
STA ADDR4 ; {3C2B}
LDA NOTEP+1 ; {4C3B}
STA ADDR4+1 ; {3C2B}
LDA (ADDR4),Y ; {6C3B} LOAD CURRENT NOTE INDEX
BEQ :PLAYDONE ; {3C2B} IF 00, EXIT
TAX ; {2C1B} MOVE OFFSET TO .X POINTER
LDA NOTETBL,X ; {5C2B} GET NOTE FREQUENCY
STA PITCH ; {4C3B}
INY ; {2C1B} INCREASE SONG POINTER
:NOCARRY LDA (ADDR4),Y ; {6C3B} GET DURATION POINTER
TAX ; {2C1B} MOVE OFFSET TO .X POINTER
LDA DURTBL,X ; {5C2B} GET DURATION VALUE
STA DURAT ; {4C3B}
JSR REDTONE ; {194C0B} PLAY NOTE
LDA NPAUSE ; {0C3B} BRIEFLY PAUSE BETWEEN NOTES
JSR NWAIT ; {6C3B} CYCLES VARY TOO MUCH TO COUNT
:PLAYDONE
RTS ; {6C1B}
-71
View File
@@ -1,71 +0,0 @@
]DUR EQU VARTAB
]PITCH EQU VARTAB+2
]OCTAVE EQU VARTAB+4
]CNT EQU VARTAB+6
*
PLAYTONE
STA ]OCTAVE
STX ]DUR+1
STY ]PITCH
LDA #0
STA ]DUR
*
** FIRST, DEAL WITH OCTAVE. OCTAVE 1 IS THE BASE
** OCTAVE 2 IS THE BASE DIV 2, OCT 3 THE BASE DIV 3,
** AND SO ON. NOTE THAT OCTAVES 6 AND 7 ARE RESERVED
** FOR ENVELOPE FUNCTIONS, AND SHOULD NOT BE USED.
*
LDX ]OCTAVE
LDA ]PITCH
JSR DIVOCT
STA ]PITCH
TXA
CLC
ADC ]PITCH
STA ]PITCH
*
*
LDA #255
SEC
SBC ]PITCH
CLC
ADC ]DUR+1
STA ]DUR+1
LDA ]DUR
ADC #0
STA ]DUR
*
LDY ]OCTAVE
:OCTLP
LDY ]DUR+1
LDA ]DUR
LDX ]OCTAVE
JSR MULOCT
STY ]DUR+1
STX ]DUR
*
*
*
:LP1
LDA #0
LDX #0
LDY ]PITCH
BIT SPKR
:DELAY
DEY
BNE :DELAY
:DURATE
LDA ]DUR+1
SEC
SBC #1
STA ]DUR+1
LDA ]DUR
SBC #0
STA ]DUR
BCS :LP1
BCC :EXIT
*BNE :LP1
*
:EXIT
RTS
+131
View File
@@ -0,0 +1,131 @@
*
*``````````````````````````````*
* SOUNDFX *
* *
* CONTAINS A NUMBER OF SOUND *
* EFFECTS THAT ARE REQUESTED *
* BY NUMBER. MANY OF THESE CAN *
* ACCEPT VARIABLES TO CHANGE *
* THE TONE,DURATION,SWEEP, AND *
* SO ON. *
* *
* SOME OF THESE ARE COPIED *
* DIRECTLY FROM OTHER SOURCES. *
* WHERE EACH EFFECT COMES FROM *
* IS LABELED AT THE STARTING *
* POSITION OF THAT EFFECT. *
* *
* INPUT: *
* *
* BPAR1 = EFFECT NUMBER *
* BPAR2 = VARIABLE ONE *
* BLAR3 = VARIABLE TWO *
* *
* DESTROY: NZCIDV *
* ^^^ ^ *
* *
* CYCLES: 1941 (HIGHLY FLAWED) *
* SIZE: 287 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
]CNTR EQU BPAR2 ; MACHINE GUN BURSTS
]PWDTH EQU BPAR3 ; SWOOP PULSE WIDTH--40,80,128,160
]PCNT EQU BPAR2 ; SWOOP PULSE COUNT--1
]PSTEP EQU BPAR2 ; WORM STEP--1,77,129,179
]WWDTH EQU BPAR3 ; WORM PULSE WIDTH--176,88
]PLIMIT EQU BPAR4 ; PULSE LIMIT
]F1 EQU BPAR2 ; ALERT FIRST FREQUENCY
]F2 EQU BPAR3 ; ALERT 2ND FREQUENCY
*
]DUR DFB #08 ; {0C1B} ALERT DURATION
]WT DFB #10 ; {0C1B} ALERT REST PERIOD
*
SOUNDFX
*
LDA BPAR1 ; {3C2B}
CMP #0 ; {3C2B}
BEQ :MGUN ; {3C2B}
CMP #1 ; {3C2B}
BEQ :SWOOP ; {3C2B}
CMP #2 ; {3C2B}
BEQ :WORM ; {3C2B}
CMP #3 ; {3C2B}
BEQ :ALERT ; {3C2B}
*
:MGUN JMP ]MGUN ; {3C3B}
:SWOOP JMP ]SWOOP ; {3C3B}
:WORM JMP ]WORM ; {3C3B}
:ALERT JMP ]ALERT ; {3C3B}
*
** FROM BOB SANDER-CEDARLOFF'S CONTRIBUTION IN
** V1, ISS. 5 OF APPLE ASSEMBLY LINE.
*
]MGUN ; 33C,17B FOR THIS EFFECT ONLY
:A2 BIT SPKR ; {4C3B}
LDY $BA00,X ; {5C3B} GET "RANDOM" PULSE WIDTH
:A1 DEY ; {2C1B} DELAY LOOP FOR PULSE WIDTH
BNE :A1 ; {3C2B}
DEX ; {2C1B} GET NEXT PULSE
BNE :A2 ; {3C2B}
DEC ]CNTR ; {5C2B} GET NEXT BURST
BNE :A2 ; {3C2B}
RTS ; {6C1B}
*
** FROM BOB SANDER-CEDARLOFF'S CONTRIBUTION IN
** V1, ISS. 5 OF APPLE ASSEMBLY LINE.
*
]SWOOP ; 34C,18B FOR THIS SOUND EFFECT
:B1 LDY ]PCNT ; {3C2B}
:B2 BIT SPKR ; {4C3B}
LDX ]PWDTH ; {3C2B}
:B3 DEX ; {2C1B} DELAY LOOP FOR ONE PULSE
BNE :B3 ; {3C2B}
DEY ; {2C1B} LOOP FOR NUMBER OF PULSES
BNE :B2 ; {3C2B} AT EACH PULSE WIDTH
DEC ]PWDTH ; {5C2B} SHRINK PULSE WIDTH
BNE :B1 ; {3C2B} TO LIMIT OF 0
RTS ; {6C1B}
*
** FROM BOB SANDER-CEDARLOFF'S CONTRIBUTION IN
** V1, ISS. 5 OF APPLE ASSEMBLY LINE.
*
]WORM ; 47C,26B FOR THIS SOUND EFFECT
LDA ]WWDTH ; {3C2B}
STA ]PLIMIT ; {3C2B}
:C1 BIT SPKR ; {4C3B}
LDX ]WWDTH ; {3C2B} DELAY LOOP FOR PULSE WIDTH
:C2 PHA ; {3C1B} LONGER DELAY LOOP
PLA ; {3C1B}
DEX ; {2C1B} END OF PULSE?
BNE :C2 ; {3C2B} NO
CLC ; {2C1B} CHANGE PULSE WIDTH BY STEP
LDA ]WWDTH ; {3C2B}
ADC ]PSTEP ; {3C2B}
STA ]WWDTH ; {3C2B}
CMP ]PLIMIT ; {3C2B}
BNE :C1 ; {3C2B}
RTS ; {6C1B}
]ALERT ; 1788C,196B FOR THIS EFFECT
PFREQ ]F1;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F2;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F1;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F2;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F1;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F2;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F1;]DUR ; {214C15B}
LDA ]WT ; {4C3B}
JSR NWAIT ; {6C3B}
PFREQ ]F2;]DUR ; {214C15B}
RTS ; {6C1B}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-3
View File
@@ -1,3 +0,0 @@
BLOAD MINIFY
CALL -151
7000G
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-854
View File
@@ -1,854 +0,0 @@
0901- AA TAX
0902- 8D AA E0 STA $E0AA
0905- E0 E0 CPX #$E0
0907- E0 E0 CPX #$E0
0909- E0 E0 CPX #$E0
090B- E0 E0 CPX #$E0
090D- E0 E0 CPX #$E0
090F- E0 E0 CPX #$E0
0911- E0 E0 CPX #$E0
0913- E0 E0 CPX #$E0
0915- E0 E0 CPX #$E0
0917- E0 E0 CPX #$E0
0919- E0 E0 CPX #$E0
091B- E0 E0 CPX #$E0
091D- E0 E0 CPX #$E0
091F- E0 E0 CPX #$E0
0921- E0 AA CPX #$AA
0923- 8D AA 20 STA $20AA
0926- 20 20 20 JSR $2020
0929- 20 20 AD JSR $AD20
092C- BC 20 C3 LDY $C320,X
092F- CF ???
0930- CD CD CF CMP $CFCD
0933- CE 20 C4 DEC $C420
0936- C5 CD CMP $CD
0938- CF ???
0939- 20 A9 AD JSR $ADA9
093C- 20 20 20 JSR $2020
093F- 20 20 20 JSR $2020
0942- 20 AA 8D JSR $8DAA
0945- AA TAX
0946- 20 20 20 JSR $2020
0949- 20 20 20 JSR $2020
094C- 20 20 20 JSR $2020
094F- 20 20 20 JSR $2020
0952- 20 20 20 JSR $2020
0955- 20 20 20 JSR $2020
0958- 20 20 20 JSR $2020
095B- 20 20 20 JSR $2020
095E- 20 20 20 JSR $2020
0961- 20 20 20 JSR $2020
0964- AA TAX
0965- 8D AA 20 STA $20AA
0968- 20 20 20 JSR $2020
096B- 20 20 20 JSR $2020
096E- 20 D6 C5 JSR $C5D6
0971- D2 D3 CMP ($D3)
0973- C9 CF CMP #$CF
0975- CE 20 B0 DEC $B020
0978- AE B4 AE LDX $AEB4
097B- B0 20 BCS $099D
097D- 20 20 20 JSR $2020
0980- 20 20 20 JSR $2020
0983- 20 20 AA JSR $AA20
0986- 8D AA 20 STA $20AA
0989- 20 20 20 JSR $2020
098C- 20 20 20 JSR $2020
098F- 20 20 20 JSR $2020
0992- 20 20 20 JSR $2020
0995- 20 20 20 JSR $2020
0998- 20 20 20 JSR $2020
099B- 20 20 20 JSR $2020
099E- 20 20 20 JSR $2020
09A1- 20 20 20 JSR $2020
09A4- 20 20 AA JSR $AA20
09A7- 8D AA 20 STA $20AA
09AA- 20 20 20 JSR $2020
09AD- 20 20 20 JSR $2020
09B0- 20 20 B2 JSR $B220
09B3- B8 CLV
09B4- AD C1 D0 LDA $D0C1
09B7- D2 AD CMP ($AD)
09B9- B2 B0 LDA ($B0)
09BB- B1 B9 LDA ($B9),Y
09BD- 20 20 20 JSR $2020
09C0- 20 20 20 JSR $2020
09C3- 20 20 20 JSR $2020
09C6- 20 AA 8D JSR $8DAA
09C9- AA TAX
09CA- 20 20 20 JSR $2020
09CD- 20 20 20 JSR $2020
09D0- 20 20 20 JSR $2020
09D3- 20 20 20 JSR $2020
09D6- 20 20 20 JSR $2020
09D9- 20 20 20 JSR $2020
09DC- 20 20 20 JSR $2020
09DF- 20 20 20 JSR $2020
09E2- 20 20 20 JSR $2020
09E5- 20 20 20 JSR $2020
09E8- AA TAX
09E9- 8D AA 20 STA $20AA
09EC- 20 20 20 JSR $2020
09EF- 20 20 20 JSR $2020
09F2- CE C1 D4 DEC $D4C1
09F5- C8 INY
09F6- C1 CE CMP ($CE,X)
09F8- 20 C4 AE JSR $AEC4
09FB- 20 D2 C9 JSR $C9D2
09FE- C7 ???
09FF- C7 ???
0A00- D3 ???
0A01- 20 20 20 JSR $2020
0A04- 20 20 20 JSR $2020
0A07- 20 20 AA JSR $AA20
0A0A- 8D AA 20 STA $20AA
0A0D- 20 20 CE JSR $CE20
0A10- C1 D4 CMP ($D4,X)
0A12- C8 INY
0A13- C1 CE CMP ($CE,X)
0A15- AE D2 C9 LDX $C9D2
0A18- C7 ???
0A19- C7 ???
0A1A- D3 ???
0A1B- C0 CF CPY #$CF
0A1D- D5 D4 CMP $D4,X
0A1F- CC CF CF CPY $CFCF
0A22- CB ???
0A23- AE C3 CF LDX $CFC3
0A26- CD 20 20 CMP $2020
0A29- 20 AA 8D JSR $8DAA
0A2C- AA TAX
0A2D- AC AC AC LDY $ACAC
0A30- AC AC AC LDY $ACAC
0A33- AC AC AC LDY $ACAC
0A36- AC AC AC LDY $ACAC
0A39- AC AC AC LDY $ACAC
0A3C- AC AC AC LDY $ACAC
0A3F- AC AC AC LDY $ACAC
0A42- AC AC AC LDY $ACAC
0A45- AC AC AC LDY $ACAC
0A48- AC AC AC LDY $ACAC
0A4B- AA TAX
0A4C- 8D AA 8D STA $8DAA
0A4F- AA TAX
0A50- AA TAX
0A51- 20 C1 D3 JSR $D3C1
0A54- D3 ???
0A55- C5 CD CMP $CD
0A57- C2 ???
0A58- CC C5 D2 CPY $D2C5
0A5B- 20 C4 C9 JSR $C9C4
0A5E- D2 C5 CMP ($C5)
0A60- C3 ???
0A61- D4 ???
0A62- C9 D6 CMP #$D6
0A64- C5 D3 CMP $D3
0A66- 8D AA 8D STA $8DAA
0A69- A0 C3 LDY #$C3
0A6B- D9 C3 A0 CMP $A0C3,Y
0A6E- C1 D6 CMP ($D6,X)
0A70- C5 8D CMP $8D
0A72- A0 C5 LDY #$C5
0A74- D8 CLD
0A75- D0 A0 BNE $0A17
0A77- CF ???
0A78- CE CC D9 DEC $D9CC
0A7B- 8D A0 D4 STA $D4A0
0A7E- D2 A0 CMP ($A0)
0A80- CF ???
0A81- CE 8D A0 DEC $A08D
0A84- C4 D3 CPY $D3
0A86- CB ???
0A87- A0 D3 LDY #$D3
0A89- D4 ???
0A8A- D2 D5 CMP ($D5)
0A8C- C3 ???
0A8D- D4 ???
0A8E- D5 D2 CMP $D2,X
0A90- C5 D3 CMP $D3
0A92- AE C4 C5 LDX $C5C4
0A95- CD CF 8D CMP $8DCF
0A98- A0 CF LDY #$CF
0A9A- C2 ???
0A9B- CA DEX
0A9C- A0 A4 LDY #$A4
0A9E- C2 ???
0A9F- C6 C5 DEC $C5
0AA1- B0 8D BCS $0A30
0AA3- A0 CF LDY #$CF
0AA5- D2 C7 CMP ($C7)
0AA7- A0 A4 LDY #$A4
0AA9- B6 B0 LDX $B0,Y
0AAB- B0 B0 BCS $0A5D
0AAD- 8D AA 8D STA $8DAA
0AB0- AA TAX
0AB1- E0 E0 CPX #$E0
0AB3- E0 E0 CPX #$E0
0AB5- E0 E0 CPX #$E0
0AB7- E0 E0 CPX #$E0
0AB9- E0 E0 CPX #$E0
0ABB- E0 E0 CPX #$E0
0ABD- E0 E0 CPX #$E0
0ABF- E0 E0 CPX #$E0
0AC1- E0 E0 CPX #$E0
0AC3- E0 E0 CPX #$E0
0AC5- E0 E0 CPX #$E0
0AC7- E0 E0 CPX #$E0
0AC9- E0 E0 CPX #$E0
0ACB- E0 E0 CPX #$E0
0ACD- E0 E0 CPX #$E0
0ACF- AA TAX
0AD0- 8D AA 20 STA $20AA
0AD3- 20 D4 CF JSR $CFD4
0AD6- D0 20 BNE $0AF8
0AD8- C9 CE CMP #$CE
0ADA- C3 ???
0ADB- CC D5 C4 CPY $C4D5
0ADE- C5 D3 CMP $D3
0AE0- 20 A8 C8 JSR $C8A8
0AE3- CF ???
0AE4- CF ???
0AE5- CB ???
0AE6- D3 ???
0AE7- AC CD C1 LDY $C1CD
0AEA- C3 ???
0AEB- D2 CF CMP ($CF)
0AED- D3 ???
0AEE- A9 20 LDA #$20
0AF0- AA TAX
0AF1- 8D AA AC STA $ACAA
0AF4- AC AC AC LDY $ACAC
0AF7- AC AC AC LDY $ACAC
0AFA- AC AC AC LDY $ACAC
0AFD- AC AC AC LDY $ACAC
0B00- AC AC AC LDY $ACAC
0B03- AC AC AC LDY $ACAC
0B06- AC AC AC LDY $ACAC
0B09- AC AC AC LDY $ACAC
0B0C- AC AC AC LDY $ACAC
0B0F- AC AC AA LDY $AAAC
0B12- 8D AA 8D STA $8DAA
0B15- A0 D0 LDY #$D0
0B17- D5 D4 CMP $D4,X
0B19- A0 CD LDY #$CD
0B1B- C9 CE CMP #$CE
0B1D- AE C8 C5 LDX $C5C8
0B20- C1 C4 CMP ($C4,X)
0B22- AE D2 C5 LDX $C5D2
0B25- D1 D5 CMP ($D5),Y
0B27- C9 D2 CMP #$D2
0B29- C5 C4 CMP $C4
0B2B- 8D A0 D5 STA $D5A0
0B2E- D3 ???
0B2F- C5 A0 CMP $A0
0B31- CD C9 CE CMP $CEC9
0B34- AE CD C1 LDX $C1CD
0B37- C3 ???
0B38- AE D2 C5 LDX $C5D2
0B3B- D1 D5 CMP ($D5),Y
0B3D- C9 D2 CMP #$D2
0B3F- C5 C4 CMP $C4
0B41- 8D A0 D5 STA $D5A0
0B44- D3 ???
0B45- C5 A0 CMP $A0
0B47- CD C1 C3 CMP $C3C1
0B4A- AE C9 C6 LDX $C6C9
0B4D- D3 ???
0B4E- D4 ???
0B4F- D2 D5 CMP ($D5)
0B51- C3 ???
0B52- D4 ???
0B53- 8D A0 D5 STA $D5A0
0B56- D3 ???
0B57- C5 A0 CMP $A0
0B59- CD C1 C3 CMP $C3C1
0B5C- AE CC CF LDX $CFCC
0B5F- CF ???
0B60- D0 D3 BNE $0B35
0B62- D4 ???
0B63- D2 D5 CMP ($D5)
0B65- C3 ???
0B66- D4 ???
0B67- 8D DD C8 STA $C8DD
0B6A- CF ???
0B6B- CD C5 A0 CMP $A0C5
0B6E- C5 D1 CMP $D1
0B70- D5 A0 CMP $A0,X
0B72- A4 C6 LDY $C6
0B74- C3 ???
0B75- B5 B8 LDA $B8,X
0B77- 8D AA 8D STA $8DAA
0B7A- AA TAX
0B7B- E0 E0 CPX #$E0
0B7D- E0 E0 CPX #$E0
0B7F- E0 E0 CPX #$E0
0B81- E0 E0 CPX #$E0
0B83- E0 E0 CPX #$E0
0B85- E0 E0 CPX #$E0
0B87- E0 E0 CPX #$E0
0B89- E0 E0 CPX #$E0
0B8B- E0 E0 CPX #$E0
0B8D- E0 E0 CPX #$E0
0B8F- E0 E0 CPX #$E0
0B91- E0 E0 CPX #$E0
0B93- E0 E0 CPX #$E0
0B95- E0 E0 CPX #$E0
0B97- E0 E0 CPX #$E0
0B99- AA TAX
0B9A- 8D AA 20 STA $20AA
0B9D- 20 20 20 JSR $2020
0BA0- 20 20 D0 JSR $D020
0BA3- D2 CF CMP ($CF)
0BA5- C7 ???
0BA6- D2 C1 CMP ($C1)
0BA8- CD 20 CD CMP $CD20
0BAB- C1 C9 CMP ($C9,X)
0BAD- CE 20 C2 DEC $C220
0BB0- CF ???
0BB1- C4 D9 CPY $D9
0BB3- 20 20 20 JSR $2020
0BB6- 20 20 20 JSR $2020
0BB9- 20 AA 8D JSR $8DAA
0BBC- AA TAX
0BBD- AC AC AC LDY $ACAC
0BC0- AC AC AC LDY $ACAC
0BC3- AC AC AC LDY $ACAC
0BC6- AC AC AC LDY $ACAC
0BC9- AC AC AC LDY $ACAC
0BCC- AC AC AC LDY $ACAC
0BCF- AC AC AC LDY $ACAC
0BD2- AC AC AC LDY $ACAC
0BD5- AC AC AC LDY $ACAC
0BD8- AC AC AC LDY $ACAC
0BDB- AA TAX
0BDC- 8D AA 8D STA $8DAA
0BDF- DD D6 C1 CMP $C1D6,X
0BE2- D2 B1 CMP ($B1)
0BE4- A0 C5 LDY #$C5
0BE6- D1 D5 CMP ($D5),Y
0BE8- A0 D6 LDY #$D6
0BEA- C1 D2 CMP ($D2,X)
0BEC- D4 ???
0BED- C1 C2 CMP ($C2,X)
0BEF- 8D DD D6 STA $D6DD
0BF2- C1 D2 CMP ($D2,X)
0BF4- B2 A0 LDA ($A0)
0BF6- C5 D1 CMP $D1
0BF8- D5 A0 CMP $A0,X
0BFA- D6 C1 DEC $C1,X
0BFC- D2 D4 CMP ($D4)
0BFE- C1 C2 CMP ($C2,X)
0C00- AB ???
0C01- B1 8D LDA ($8D),Y
0C03- DD D6 C1 CMP $C1D6,X
0C06- D2 B3 CMP ($B3)
0C08- A0 C5 LDY #$C5
0C0A- D1 D5 CMP ($D5),Y
0C0C- A0 D6 LDY #$D6
0C0E- C1 D2 CMP ($D2,X)
0C10- D4 ???
0C11- C1 C2 CMP ($C2,X)
0C13- AB ???
0C14- B2 8D LDA ($8D)
0C16- DD D6 C1 CMP $C1D6,X
0C19- D2 B4 CMP ($B4)
0C1B- A0 C5 LDY #$C5
0C1D- D1 D5 CMP ($D5),Y
0C1F- A0 D6 LDY #$D6
0C21- C1 D2 CMP ($D2,X)
0C23- D4 ???
0C24- C1 C2 CMP ($C2,X)
0C26- AB ???
0C27- B3 ???
0C28- 8D DD C3 STA $C3DD
0C2B- CF ???
0C2C- D5 CE CMP $CE,X
0C2E- D4 ???
0C2F- C5 D2 CMP $D2
0C31- A0 C5 LDY #$C5
0C33- D1 D5 CMP ($D5),Y
0C35- A0 D6 LDY #$D6
0C37- C1 D2 CMP ($D2,X)
0C39- D4 ???
0C3A- C1 C2 CMP ($C2,X)
0C3C- AB ???
0C3D- B4 8D LDY $8D,X
0C3F- DD C3 CF CMP $CFC3,X
0C42- D5 D4 CMP $D4,X
0C44- B1 A0 LDA ($A0),Y
0C46- C5 D1 CMP $D1
0C48- D5 A0 CMP $A0,X
0C4A- A4 C6 LDY $C6
0C4C- C4 C6 CPY $C6
0C4E- B0 8D BCS $0BDD
0C50- AA TAX
0C51- 8D A0 CA STA $CAA0
0C54- D3 ???
0C55- D2 A0 CMP ($A0)
0C57- DD C8 CF CMP $CFC8,X
0C5A- CD C5 8D CMP $8DC5
0C5D- AA TAX
0C5E- 8D A0 CC STA $CCA0
0C61- C4 C1 CPY $C1
0C63- A0 A3 LDY #$A3
0C65- B1 B0 LDA ($B0),Y
0C67- 8D A0 D3 STA $D3A0
0C6A- D4 ???
0C6B- C1 A0 CMP ($A0,X)
0C6D- DD D6 C1 CMP $C1D6,X
0C70- D2 B1 CMP ($B1)
0C72- 8D A0 D3 STA $D3A0
0C75- D4 ???
0C76- C1 A0 CMP ($A0,X)
0C78- DD D6 C1 CMP $C1D6,X
0C7B- D2 B3 CMP ($B3)
0C7D- 8D A0 CC STA $CCA0
0C80- C4 C1 CPY $C1
0C82- A0 A3 LDY #$A3
0C84- B2 B0 LDA ($B0)
0C86- 8D A0 D3 STA $D3A0
0C89- D4 ???
0C8A- C1 A0 CMP ($A0,X)
0C8C- DD D6 C1 CMP $C1D6,X
0C8F- D2 B2 CMP ($B2)
0C91- 8D A0 D3 STA $D3A0
0C94- D4 ???
0C95- C1 A0 CMP ($A0,X)
0C97- DD D6 C1 CMP $C1D6,X
0C9A- D2 B4 CMP ($B4)
0C9C- 8D AA 8D STA $8DAA
0C9F- A0 C9 LDY #$C9
0CA1- C6 CA DEC $CA
0CA3- A0 DD LDY #$DD
0CA5- D6 C1 DEC $C1,X
0CA7- D2 B1 CMP ($B1)
0CA9- BB ???
0CAA- C5 BB CMP $BB
0CAC- DD D6 C1 CMP $C1D6,X
0CAF- D2 B2 CMP ($B2)
0CB1- BB ???
0CB2- D6 B1 DEC $B1,X
0CB4- C5 B2 CMP $B2
0CB6- 8D C1 B1 STA $B1C1
0CB9- A0 C9 LDY #$C9
0CBB- C6 CA DEC $CA
0CBD- A0 DD LDY #$DD
0CBF- D6 C1 DEC $C1,X
0CC1- D2 B1 CMP ($B1)
0CC3- BB ???
0CC4- C5 BB CMP $BB
0CC6- DD D6 C1 CMP $C1D6,X
0CC9- D2 B3 CMP ($B3)
0CCB- BB ???
0CCC- D6 B1 DEC $B1,X
0CCE- C5 B3 CMP $B3
0CD0- 8D C1 B2 STA $B2C1
0CD3- A0 C9 LDY #$C9
0CD5- C6 CA DEC $CA
0CD7- C5 A0 CMP $A0
0CD9- DD D6 C1 CMP $C1D6,X
0CDC- D2 B2 CMP ($B2)
0CDE- BB ???
0CDF- C5 BB CMP $BB
0CE1- DD D6 C1 CMP $C1D6,X
0CE4- D2 B3 CMP ($B3)
0CE6- BB ???
0CE7- D6 B2 DEC $B2,X
0CE9- C5 B3 CMP $B3
0CEB- BB ???
0CEC- D6 B2 DEC $B2,X
0CEE- C5 B4 CMP $B4
0CF0- 8D AA 8D STA $8DAA
0CF3- C1 B3 CMP ($B3,X)
0CF5- A0 CC LDY #$CC
0CF7- C4 C1 CPY $C1
0CF9- A0 A3 LDY #$A3
0CFB- B0 8D BCS $0C8A
0CFD- A0 D3 LDY #$D3
0CFF- D4 ???
0D00- C1 A0 CMP ($A0,X)
0D02- DD C3 CF CMP $CFC3,X
0D05- D5 CE CMP $CE,X
0D07- D4 ???
0D08- C5 D2 CMP $D2
0D0A- 8D A0 CC STA $CCA0
0D0D- C4 C1 CPY $C1
0D0F- A0 A3 LDY #$A3
0D11- A2 A5 LDX #$A5
0D13- A2 8D LDX #$8D
0D15- A0 CC LDY #$CC
0D17- CF ???
0D18- CF ???
0D19- D0 A0 BNE $0CBB
0D1B- BB ???
0D1C- 20 C2 C5 JSR $C5C2
0D1F- C7 ???
0D20- C9 CE CMP #$CE
0D22- 20 CC CF JSR $CFCC
0D25- CF ???
0D26- D0 8D BNE $0CB5
0D28- A0 CC LDY #$CC
0D2A- C4 C1 CPY $C1
0D2C- A0 A3 LDY #$A3
0D2E- A2 AA LDX #$AA
0D30- A2 8D LDX #$8D
0D32- A0 CA LDY #$CA
0D34- D3 ???
0D35- D2 A0 CMP ($A0)
0D37- DD C3 CF CMP $CFC3,X
0D3A- D5 D4 CMP $D4,X
0D3C- B1 8D LDA ($8D),Y
0D3E- A0 C9 LDY #$C9
0D40- CE C3 A0 DEC $A0C3
0D43- DD C3 CF CMP $CFC3,X
0D46- D5 CE CMP $CE,X
0D48- D4 ???
0D49- C5 D2 CMP $D2
0D4B- 8D A0 CC STA $CCA0
0D4E- C4 C1 CPY $C1
0D50- A0 A3 LDY #$A3
0D52- A2 A5 LDX #$A5
0D54- A2 8D LDX #$8D
0D56- A0 D5 LDY #$D5
0D58- CE D4 C9 DEC $C9D4
0D5B- CC A0 DD CPY $DDA0
0D5E- C3 ???
0D5F- CF ???
0D60- D5 CE CMP $CE,X
0D62- D4 ???
0D63- C5 D2 CMP $D2
0D65- BB ???
0D66- C5 BB CMP $BB
0D68- A3 ???
0D69- B1 B0 LDA ($B0),Y
0D6B- 8D A0 CA STA $CAA0
0D6E- D3 ???
0D6F- D2 A0 CMP ($A0)
0D71- DD C3 CF CMP $CFC3,X
0D74- D5 D4 CMP $D4,X
0D76- B1 8D LDA ($8D),Y
0D78- AA TAX
0D79- 8D C1 B4 STA $B4C1
0D7C- A0 CC LDY #$CC
0D7E- C4 C1 CPY $C1
0D80- A0 A3 LDY #$A3
0D82- B0 8D BCS $0D11
0D84- A0 D3 LDY #$D3
0D86- D4 ???
0D87- C1 A0 CMP ($A0,X)
0D89- DD C3 CF CMP $CFC3,X
0D8C- D5 CE CMP $CE,X
0D8E- D4 ???
0D8F- C5 D2 CMP $D2
0D91- 8D A0 CC STA $CCA0
0D94- C4 C1 CPY $C1
0D96- A0 A3 LDY #$A3
0D98- A2 A5 LDX #$A5
0D9A- A2 8D LDX #$8D
0D9C- A0 CC LDY #$CC
0D9E- CF ???
0D9F- CF ???
0DA0- D0 A0 BNE $0D42
0DA2- BB ???
0DA3- 20 C2 C5 JSR $C5C2
0DA6- C7 ???
0DA7- C9 CE CMP #$CE
0DA9- 20 CC CF JSR $CFCC
0DAC- CF ???
0DAD- D0 8D BNE $0D3C
0DAF- A0 CC LDY #$CC
0DB1- C4 C1 CPY $C1
0DB3- A0 A3 LDY #$A3
0DB5- A2 AA LDX #$AA
0DB7- A2 8D LDX #$8D
0DB9- A0 CA LDY #$CA
0DBB- D3 ???
0DBC- D2 A0 CMP ($A0)
0DBE- DD C3 CF CMP $CFC3,X
0DC1- D5 D4 CMP $D4,X
0DC3- B1 8D LDA ($8D),Y
0DC5- A0 C9 LDY #$C9
0DC7- CE C3 A0 DEC $A0C3
0DCA- DD C3 CF CMP $CFC3,X
0DCD- D5 CE CMP $CE,X
0DCF- D4 ???
0DD0- C5 D2 CMP $D2
0DD2- 8D A0 CC STA $CCA0
0DD5- C4 C1 CPY $C1
0DD7- A0 A3 LDY #$A3
0DD9- A2 A5 LDX #$A5
0DDB- A2 8D LDX #$8D
0DDD- A0 D7 LDY #$D7
0DDF- C8 INY
0DE0- C9 CC CMP #$CC
0DE2- C5 A0 CMP $A0
0DE4- DD C3 CF CMP $CFC3,X
0DE7- D5 CE CMP $CE,X
0DE9- D4 ???
0DEA- C5 D2 CMP $D2
0DEC- BB ???
0DED- A8 TAY
0DEE- BB ???
0DEF- A3 ???
0DF0- B1 B0 LDA ($B0),Y
0DF2- 8D A0 CA STA $CAA0
0DF5- D3 ???
0DF6- D2 A0 CMP ($A0)
0DF8- DD C3 CF CMP $CFC3,X
0DFB- D5 D4 CMP $D4,X
0DFD- B1 8D LDA ($8D),Y
0DFF- AA TAX
0E00- 8D A0 CC STA $CCA0
0E03- C4 C1 CPY $C1
0E05- A0 A3 LDY #$A3
0E07- A4 B8 LDY $B8
0E09- C4 8D CPY $8D
0E0B- A0 CA LDY #$CA
0E0D- D3 ???
0E0E- D2 A0 CMP ($A0)
0E10- DD C3 CF CMP $CFC3,X
0E13- D5 D4 CMP $D4,X
0E15- B1 8D LDA ($8D),Y
0E17- A0 CA LDY #$CA
0E19- D3 ???
0E1A- D2 A0 CMP ($A0)
0E1C- DD C3 CF CMP $CFC3,X
0E1F- D5 D4 CMP $D4,X
0E21- B1 8D LDA ($8D),Y
0E23- A0 C6 LDY #$C6
0E25- CF ???
0E26- D2 A0 CMP ($A0)
0E28- A3 ???
0E29- DD D6 C1 CMP $C1D6,X
0E2C- D2 B1 CMP ($B1)
0E2E- BB ???
0E2F- A3 ???
0E30- B0 BB BCS $0DED
0E32- A3 ???
0E33- B1 B0 LDA ($B0),Y
0E35- BB ???
0E36- A3 ???
0E37- B2 8D LDA ($8D)
0E39- A0 C4 LDY #$C4
0E3B- D5 CD CMP $CD,X
0E3D- D0 A0 BNE $0DDF
0E3F- A3 ???
0E40- DD D6 C1 CMP $C1D6,X
0E43- D2 B1 CMP ($B1)
0E45- BB ???
0E46- A3 ???
0E47- B2 8D LDA ($8D)
0E49- A0 CE LDY #$CE
0E4B- C5 D8 CMP $D8
0E4D- D4 ???
0E4E- 8D AA 8D STA $8DAA
0E51- A0 C9 LDY #$C9
0E53- C6 C2 DEC $C2
0E55- B0 A0 BCS $0DF7
0E57- DD D6 C1 CMP $C1D6,X
0E5A- D2 B4 CMP ($B4)
0E5C- BB ???
0E5D- C5 BB CMP $BB
0E5F- A3 ???
0E60- B2 B0 LDA ($B0)
0E62- 8D A0 DF STA $DFA0
0E65- D0 D2 BNE $0E39
0E67- CE A0 A2 DEC $A2A0
0E6A- D7 ???
0E6B- C5 CC CMP $CC
0E6D- D0 A2 BNE $0E11
0E6F- AC B8 C4 LDY $C4B8
0E72- 8D A0 C9 STA $C9A0
0E75- C6 C2 DEC $C2
0E77- B1 A0 LDA ($A0),Y
0E79- DD D6 C1 CMP $C1D6,X
0E7C- D2 B3 CMP ($B3)
0E7E- BB ???
0E7F- C5 BB CMP $BB
0E81- A3 ???
0E82- B0 B9 BCS $0E3D
0E84- 8D A0 DF STA $DFA0
0E87- D0 D2 BNE $0E5B
0E89- CE A0 A2 DEC $A2A0
0E8C- D4 ???
0E8D- C8 INY
0E8E- C1 D4 CMP ($D4,X)
0E90- 20 D7 C1 JSR $C1D7
0E93- D3 ???
0E94- 20 C6 D5 JSR $D5C6
0E97- CE AE A2 DEC $A2AE
0E9A- AC B8 C4 LDY $C4B8
0E9D- B8 CLV
0E9E- C4 8D CPY $8D
0EA0- A0 C5 LDY #$C5
0EA2- CE C4 C9 DEC $C9C4
0EA5- C6 C2 DEC $C2
0EA7- B1 8D LDA ($8D),Y
0EA9- A0 DF LDY #$DF
0EAB- D0 D2 BNE $0E7F
0EAD- CE A0 A2 DEC $A2A0
0EB0- C3 ???
0EB1- C8 INY
0EB2- CF ???
0EB3- CF ???
0EB4- 20 C3 C8 JSR $C8C3
0EB7- CF ???
0EB8- CF ???
0EB9- A1 A2 LDA ($A2,X)
0EBB- AC B8 C4 LDY $C4B8
0EBE- B8 CLV
0EBF- C4 8D CPY $8D
0EC1- A0 C5 LDY #$C5
0EC3- CE C4 C9 DEC $C9C4
0EC6- C6 C2 DEC $C2
0EC8- B0 8D BCS $0E57
0ECA- A0 DF LDY #$DF
0ECC- D0 D2 BNE $0EA0
0ECE- CE A0 A2 DEC $A2A0
0ED1- C4 CF CPY $CF
0ED3- CE C5 A1 DEC $A1C5
0ED6- A2 AC LDX #$AC
0ED8- B8 CLV
0ED9- C4 B8 CPY $B8
0EDB- C4 8D CPY $8D
0EDD- AA TAX
0EDE- 8D A0 CA STA $CAA0
0EE1- CD D0 A0 CMP $A0D0
0EE4- D2 C5 CMP ($C5)
0EE6- C5 CE CMP $CE
0EE8- D4 ???
0EE9- D2 D9 CMP ($D9)
0EEB- 8D AA 8D STA $8DAA
0EEE- D6 B1 DEC $B1,X
0EF0- C5 B2 CMP $B2
0EF2- 8D A0 DF STA $DFA0
0EF5- D0 D2 BNE $0EC9
0EF7- CE A0 A2 DEC $A2A0
0EFA- D6 C1 DEC $C1,X
0EFC- D2 B1 CMP ($B1)
0EFE- 20 BD 20 JSR $20BD
0F01- D6 C1 DEC $C1,X
0F03- D2 B2 CMP ($B2)
0F05- AE A2 8D LDX $8DA2
0F08- A0 CA LDY #$CA
0F0A- CD D0 A0 CMP $A0D0
0F0D- C1 B1 CMP ($B1,X)
0F0F- 8D D6 B1 STA $B1D6
0F12- C5 B3 CMP $B3
0F14- A0 DF LDY #$DF
0F16- D0 D2 BNE $0EEA
0F18- CE A0 A2 DEC $A2A0
0F1B- D6 C1 DEC $C1,X
0F1D- D2 B1 CMP ($B1)
0F1F- 20 BD 20 JSR $20BD
0F22- D6 C1 DEC $C1,X
0F24- D2 B3 CMP ($B3)
0F26- A2 AC LDX #$AC
0F28- B8 CLV
0F29- C4 B8 CPY $B8
0F2B- C4 8D CPY $8D
0F2D- A0 CA LDY #$CA
0F2F- CD D0 A0 CMP $A0D0
0F32- C1 B2 CMP ($B2,X)
0F34- 8D D6 B2 STA $B2D6
0F37- C5 B3 CMP $B3
0F39- 8D A0 DF STA $DFA0
0F3C- D0 D2 BNE $0F10
0F3E- CE A0 A2 DEC $A2A0
0F41- D6 C1 DEC $C1,X
0F43- D2 B2 CMP ($B2)
0F45- 20 BD 20 JSR $20BD
0F48- D6 C1 DEC $C1,X
0F4A- D2 B3 CMP ($B3)
0F4C- AE A2 AC LDX $ACA2
0F4F- B8 CLV
0F50- C4 B8 CPY $B8
0F52- C4 8D CPY $8D
0F54- A0 CA LDY #$CA
0F56- CD D0 A0 CMP $A0D0
0F59- C1 B2 CMP ($B2,X)
0F5B- 8D D6 B2 STA $B2D6
0F5E- C5 B4 CMP $B4
0F60- 8D A0 DF STA $DFA0
0F63- D0 D2 BNE $0F37
0F65- CE A0 A2 DEC $A2A0
0F68- D6 C1 DEC $C1,X
0F6A- D2 B2 CMP ($B2)
0F6C- 20 BD 20 JSR $20BD
0F6F- D6 C1 DEC $C1,X
0F71- D2 B4 CMP ($B4)
0F73- A2 AC LDX #$AC
0F75- B8 CLV
0F76- C4 B8 CPY $B8
0F78- C4 8D CPY $8D
0F7A- A0 CA LDY #$CA
0F7C- CD D0 A0 CMP $A0D0
0F7F- C1 B3 CMP ($B3,X)
0F81- 8D AA 8D STA $8DAA
0F84- AA TAX
0F85- 8D AA E0 STA $E0AA
0F88- E0 E0 CPX #$E0
0F8A- E0 E0 CPX #$E0
0F8C- E0 E0 CPX #$E0
0F8E- E0 E0 CPX #$E0
0F90- E0 E0 CPX #$E0
0F92- E0 E0 CPX #$E0
0F94- E0 E0 CPX #$E0
0F96- E0 E0 CPX #$E0
0F98- E0 E0 CPX #$E0
0F9A- E0 E0 CPX #$E0
0F9C- E0 E0 CPX #$E0
0F9E- E0 E0 CPX #$E0
0FA0- E0 E0 CPX #$E0
0FA2- E0 E0 CPX #$E0
0FA4- E0 AA CPX #$AA
0FA6- 8D AA 20 STA $20AA
0FA9- 20 20 20 JSR $2020
0FAC- 20 20 20 JSR $2020
0FAF- 20 C2 CF JSR $CFC2
0FB2- D4 ???
0FB3- D4 ???
0FB4- CF ???
0FB5- CD 20 C9 CMP $C920
0FB8- CE C3 CC DEC $CCC3
0FBB- D5 C4 CMP $C4,X
0FBD- C5 D3 CMP $D3
0FBF- 20 20 20 JSR $2020
0FC2- 20 20 20 JSR $2020
0FC5- 20 AA 8D JSR $8DAA
0FC8- AA TAX
0FC9- AC AC AC LDY $ACAC
0FCC- AC AC AC LDY $ACAC
0FCF- AC AC AC LDY $ACAC
0FD2- AC AC AC LDY $ACAC
0FD5- AC AC AC LDY $ACAC
0FD8- AC AC AC LDY $ACAC
0FDB- AC AC AC LDY $ACAC
0FDE- AC AC AC LDY $ACAC
0FE1- AC AC AC LDY $ACAC
0FE4- AC AC AC LDY $ACAC
0FE7- AA TAX
0FE8- 8D AA 8D STA $8DAA
0FEB- AA TAX
0FEC- AA TAX
0FED- 20 C2 CF JSR $CFC2
0FF0- D4 ???
0FF1- D4 ???
0FF2- CF ???
0FF3- CD 20 C9 CMP $C920
0FF6- CE C3 CC DEC $CCC3
0FF9- D5 C4 CMP $C4,X
0FFB- C5 D3 CMP $D3
0FFD- 8D AA 8D STA $8DAA
1000- A0 D0 LDY #$D0
1002- D5 D4 CMP $D4,X
1004- A0 CD LDY #$CD
1006- C9 CE CMP #$CE
1008- AE CC C9 LDX $C9CC
100B- C2 ???
100C- AE D2 C5 LDX $C5D2
100F- D1 D5 CMP ($D5),Y
1011- C9 D2 CMP #$D2
1013- C5 C4 CMP $C4
1015- 8D 00 00 STA $0000
-115
View File
@@ -1,115 +0,0 @@
*
*``````````````````````````````*
* -< COMMON DEMO )- *
* *
* VERSION 0.4.0 *
* *
* 28-APR-2019 *
* *
* NATHAN D. RIGGS *
* NATHAN.RIGGS@OUTLOOK.COM *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** ASSEMBLER DIRECTIVES
*
LST OFF
CYC AVE
EXP OFF
TR ON
DSK APPLECHOP.DEMO
OBJ $BFE0
ORG $6000
*
*``````````````````````````````*
* TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT MIN.HEAD.REQUIRED
PUT MIN.HOOKS.STDIO
USE MIN.MAC.REQUIRED
USE MIN.MAC.STDIO
USE MAC.IFSTRUCT
USE MAC.LOOPSTRUCT
LST ON
USE MAC.APPLECHOP
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
@GOTO ENDVARS
*
]VAR1 DS 2
]VAR2 DS 2
]STRING1 DS 255,0
*
ENDVARS
*
@HOME
@INVERT
@PRINT "APPLECHOP MACRO LIBRARY",8D8D
@NORMAL
@PRINT "THIS IS A DEMO FOR THE",8D
@PRINT "APPLECHOP MACRO LIBRARY, WHICH",8D
@PRINT "SOMEWHAT EMULATES THE HIGHER-",8D
@PRINT "LEVEL STRUCTURE OF APPLESOFT CODING",8D
@PRINT "TO EASE A TRANSITION BETWEEN HIGHER-",8D
@PRINT "LEVEL LANGUAGES LIKE APPLESOFT BASIC",8D
@PRINT "TO 6502 ASSEMBLY.",8D8D
@GET
@PRINT "OBVIOUSLY, IT IS RATHER IMPOSSIBLE",8D
@PRINT "TO SIMULATE APPLESOFT BASIC WITH",8D
@PRINT "100% ACCURACY WITHOUT SIMPLY WRITING",8D
@PRINT "THE INTERPRETER FROM THE GROUND UP,",8D
@PRINT "WHICH WOULD DEFEAT THE PURPOSE IN THE",8D
@PRINT "FIRST PLACE. THIS LIBRARY AIMS TO ",8D
@PRINT "HARNESS HIGHER-LEVEL FUNCTIONALITY ",8D
@PRINT "WHILE STILL REQUIRING THE USER TO LEARN",8D
@PRINT "THE BASICS OF ASSEMBLY. THEN, ONCE",8D
@PRINT "THE USER IS COMFORTABLE ENOUGH, THEY",8D
@PRINT "ARE FREE TO EXPLORE THE INNER WORKINGS",8D
@PRINT "OF HOW EACH COMMAND WORKS, SLOWLY",8D
@PRINT "REPLACING THE MACROS WITH MORE ",8D
@PRINT "EFFICIENT LOW LEVEL CODE OF THEIR OWN.",8D
@GET
_PRN " ",8D8D
@HOME
@PRINT "CURRENTLY, THE APPLECHOP LIBRARY",8D
@PRINT "OFFERS THE FOLLOWING COMMANDS:",8D8D
@PRINT "@CALL @DIM1 @DIM2",8D
@PRINT "@END @ENDIF @FLASH",8D
@PRINT "@FOR @GET @GOSUB",8D
@PRINT "@GOTO @HOME @HTAB",8D
@PRINT "@IFGOTO @IFSUB @IFTHEN",8D
@PRINT "@INPUT @INVERT @NEXT",8D
@PRINT "@NORMAL @PDL @PEEK",8D
@PRINT "@POKE @POS @PRINT",8D
@PRINT "@POP @RETURN @ONERR",8D
@PRINT "@STOP @TEXT @VTAB",8D8D
@GET
@PRINT "THE FOLLOWING WILL BE ADDED IN",8D
@PRINT "THE NEAR FUTURE, ONCE NECESSARY",8D
@PRINT "SUBROUTINES ARE COMPLETE:",8D8D
@PRINT "@COLOR @GR @HCOLOR",8D
@PRINT "@HGR @HGR2 @HLIN",8D
@PRINT "@HPLOT @PLOT @VLIN",8D8D
*
** MATH, ARRAY GET, ARRAY PUT, DOS COMMAND,
** HIRES LINE, ELSE, PRINT NUMBER, LEFT$,
** RIGHT$, MID$, CHR$, ASC, ...
*
@GET
@END
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** BOTTOM INCLUDES
*
LST OFF
PUT MIN.LIB.REQUIRED
PUT MIN.SUB.XPRINT
PUT MIN.SUB.DPRINT
*
LST ON
-26
View File
@@ -1,26 +0,0 @@
JMP __ENDHEAD
*
*``````````````````````````````*
* HIGH-LEVEL STRUCTURE HEADER *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFDEPTH DS 1
HABAK DS 1
HXBAK DS 1
HYBAK DS 1
HZBAK DS 1
HADDR DS 2
HADDR2 DS 2
*
** ENDIF/ELSE CODES FOR EMBEDDING DEPTHS
*
IFCODE0 HEX 1B9B18090600
IFCODE1 HEX 1B9B18090601
IFCODE2 HEX 1B9B18090602
IFCODE3 HEX 1B9B18090603
IFCODE4 HEX 1B9B18090604
IFCODE5 HEX 1B9B18090605
IFCODE6 HEX 1B9B18090606
IFCODE7 HEX 1B9B18090607
*
__ENDHEAD
-169
View File
@@ -1,169 +0,0 @@
@GOTO MAC
JMP ]1
<<<
@GOSUB MAC
JSR ]1
<<<
@RETURN MAC
RTS
<<<
@END MAC
JMP REENTRY
<<<
@ONERR MAC
ERRH ]1
<<<
@PRINT MAC
PRN ]1
<<<
@INPUT MAC
INP
GRET ]1
<<<
@GET MAC
GKEY
STA RETURN
LDY #1
STA RETLEN
<<<
@HOME MAC
JSR $FC58
<<<
@HTAB MAC
SETCX ]1
<<<
@VTAB MAC
SETCY ]1
<<<
@TEXT MAC
LDA $C051
<<<
@POKE MAC
LDY #0
LDA ]1
STA ADDR1
LDA ]1/$100
STA ADDR1+1
LDA ]2
STA (ADDR1),Y
<<<
@PEEK MAC
LDA ]1
STA ADDR1
LDA ]1/$100
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
STA RETURN
LDA #1
STA RETLEN
<<<
@CALL MAC
JSR ]1
<<<
@PDL MAC
PDL #0
<<<
@POS MAC
LDA $24
STA RETURN
LDY #1
STA RETURN
<<<
@INVERT MAC
LDA #$3F
STA $0032
<<<
@FLASH MAC
LDA #$7F
STA $0032
<<<
@NORMAL MAC
LDA #$FF
STA $0032
<<<
@STOP MAC
JMP REENTRY
<<<
@FOR MAC
FOR ]1;]2;]3;]4
<<<
@NEXT MAC
NEXT
<<<
@DIM1 MAC
DIM161 ]1;]2;]3;#0
<<<
@DIM2 MAC
DIM162 ]1;]2;]3;]4;#0
<<<
@POP MAC
PLA
PLA
<<<
@IFGOTO MAC
IFJ ]1;]2;]3
<<<
@IFGSUB MAC
IFS ]1;]2;]3
<<<
@IFTHEN MAC
INC IFDEPTH
LDA IFDEPTH
CMP #0
BEQ __ID0
CMP #1
BEQ __ID1
CMP #2
BEQ __ID2
__ID0 JMP ID0
__ID1 JMP ID1
__ID2 JMP ID2
ID0
IFB0 ]1;]2;]3
JMP __EX
ID1
IFB1 ]1;]2;]3
JMP __EX
ID2
IFB2 ]1;]2;]3
__EX
<<<
@ENDIF MAC
LDA IFDEPTH
CMP #0
BEQ __EI0
CMP #1
BEQ __EI1
CMP #2
BEQ __EI2
JMP __EIX
__EI0
ENDIFB0
JMP __EIX
__EI1
ENDIFB1
JMP __EIX
__EI2
ENDIFB2
__EIX
DEC IFDEPTH
<<<
@GR MAC
<<<
@COLOR MAC
<<<
@PLOT MAC
<<<
@HLIN MAC
<<<
@VLIN MAC
<<<
@HGR MAC
<<<
@HGR2 MAC
<<<
@HPLOT MAC
<<<
@HCOLOR MAC
<<<
-672
View File
@@ -1,672 +0,0 @@
*
*``````````````````````````````*
* IFJ *
* *
* STANDARD IF CONTROL STRUCT *
* THAT JUMPS IF TRUE *
* *
* PARAMETERS *
* *
* ]1 = FIRST VARIABLE *
* ]2 = CONDITIONAL TEST,WHERE *
* E = EQUALS *
* N = NOT EQUAL *
* G = GREATER THAN *
* L = LESS THAN *
* ) = GREATER THAN OR = *
* ( = LESS THAN OR EQUAL *
* ]3 = SECOND VARIABLE *
* ]4 = JUMP ADDR IF TRUE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFJ MAC
STA SCRATCH ; BACKUP .A
LDA ]1 ; COMPARE FIRST TEST VAR
CMP ]3 ; TO THE SECOND (]1, ]3)
*
IF ]2,E ; IF ]2 = E THEN TEST FOR =
BEQ ]J4 ; IF ]1 = ]3, JUMP TO ]4
FIN
IF ]2,N ; IF ]2 = N THEN TEST FOR !=
BNE ]J4 ; IF ]1 != ]3, JUMP TO ]4
FIN
IF ]2,G ; IF ]2 = G THEN TEST FOR >
BEQ ]SKPGT ; IF ]1 = ]3, SKIP TEST
BCS ]J4 ; IF ]1 > ]3, JUMP TO ]4
]SKPGT
FIN
IF ]2,L ; IF ]2 = L THEN TEST FOR <
BCC ]J4 ; IF ]1 < ]3, JUMP TO ]4
FIN
IF ]2,) ; IF ]2 = ) THEN TEST FOR >=
BCS ]J4 ; IF ]1 >= ]3, JUMP TO ]4
FIN
IF ]2,( ; IF ]2 = ( THEN TEST FOR <=
BEQ ]J4 ; IF ]1 = ]3, JUMP TO ]4
BCC ]J4 ; IF ]1 < ]3, JUMP TO ]4
FIN
*
JMP ]EXIT
]J4
LDA SCRATCH ; RESTORE .A
JMP ]4
]EXIT
LDA SCRATCH ; RESTORE .A
<<<
*
*``````````````````````````````*
* IFJE *
* *
* STANDARD IF CONTROL STRUCT *
* THAT JUMPS IF TRUE, ELSE *
* JUMP TO ALTERNATE *
* *
* PARAMETERS *
* *
* ]1 = FIRST VARIABLE *
* ]2 = CONDITIONAL TEST,WHERE *
* E = EQUALS *
* N = NOT EQUAL *
* G = GREATER THAN *
* L = LESS THAN *
* ) = GREATER THAN OR = *
* ( = LESS THAN OR EQUAL *
* ]3 = SECOND VARIABLE *
* ]4 = JUMP ADDR IF TRUE *
* ]5 = ELSE JUMP HERE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFJE MAC
STA SCRATCH
LDA ]1
CMP ]3
*
IF ]2,E ; TEST FOR EQUALITY
BEQ ]J4
JMP ]5
FIN
IF ]2,N ; NOT EQUAL
BNE ]J4
JMP ]5
FIN
IF ]2,G ; GREATER THAN
BEQ ]SKPGT ; SKIP IF EQUAL TO
BCS ]J4
]SKPGT
JMP ]5
FIN
IF ]2,L ; LESS THAN
BCC ]J4
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS ]J4
JMP ]5
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ ]J4
BCC ]J4
JMP ]5
FIN
*
JMP ]EXIT
]J4
LDA SCRATCH
JMP ]4
]EXIT
LDA SCRATCH
<<<
*
*``````````````````````````````*
* IFS *
* *
* STANDARD IF CONTROL STRUCT *
* THAT JSR'S IF TRUE *
* *
* PARAMETERS *
* *
* ]1 = FIRST VARIABLE *
* ]2 = CONDITIONAL TEST,WHERE *
* E = EQUALS *
* N = NOT EQUAL *
* G = GREATER THAN *
* L = LESS THAN *
* ) = GREATER THAN OR = *
* ( = LESS THAN OR EQUAL *
* ]3 = SECOND VARIABLE *
* ]4 = JUMP ADDR IF TRUE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFS MAC
STA SCRATCH
LDA ]1
CMP ]3
*
IF ]2,E ; TEST FOR EQUALITY
BEQ ]J4
FIN
IF ]2,N ; NOT EQUAL
BNE ]J4
FIN
IF ]2,G ; GREATER THAN
BEQ ]SKPGT ; SKIP IF EQUAL TO
BCS ]J4
]SKPGT
FIN
IF ]2,L ; LESS THAN
BCC ]J4
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS ]J4
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ ]J4
BCC ]J4
FIN
*
LDA SCRATCH
JMP ]EXIT
]J4
LDA SCRATCH
JSR ]4
]EXIT
<<<
*
*``````````````````````````````*
* IFSE *
* *
* STANDARD IF CONTROL STRUCT *
* THAT JSR'S IF TRUE, ELSE *
* JSR TO ALTERNATE *
* *
* PARAMETERS *
* *
* ]1 = FIRST VARIABLE *
* ]2 = CONDITIONAL TEST,WHERE *
* E = EQUALS *
* N = NOT EQUAL *
* G = GREATER THAN *
* L = LESS THAN *
* ) = GREATER THAN OR = *
* ( = LESS THAN OR EQUAL *
* ]3 = SECOND VARIABLE *
* ]4 = JSR ADDR IF TRUE *
* ]5 = ELSE JSR HERE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFSE MAC
STA SCRATCH
LDA ]1
CMP ]3
*
IF ]2,E ; TEST FOR EQUALITY
BEQ ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,N ; NOT EQUAL
BNE ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,G ; GREATER THAN
BEQ ]SKPGT ; SKIP IF EQUAL TO
BCS ]J4
]SKPGT
LDA SCRATCH
JSR ]5
FIN
IF ]2,L ; LESS THAN
BCC ]J4
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ ]J4
BCC ]J4
LDA SCRATCH
JSR ]5
FIN
*
LDA SCRATCH
JMP ]EXIT
]J4
LDA SCRATCH
JSR ]4
]EXIT
<<<
*
*``````````````````````````````*
* IFB0 *
* *
* EXECUTES BLOCK OF TEXT THAT *
* SITES BETWEEN IF STATEMENT *
* AND AN ELSE/ENDIF STATEMENT. *
* *
* ]1 = FIRST CONDITIONAL VAR *
* ]2 = CONDITIONAL *
* ]3 = SECOND TEST VARIABLE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFB0 MAC
*
STA SCRATCH
]PTR EQU *
LDA ]PTR
STA ADDR1
LDA ]PTR+1
STA ADDR1/$100
_LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$1B
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$9B
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$18
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$09
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$06
BNE _LOOP1
LDA ADDR1
*
** MAGIC KEY FOUND, NOW JUMP TO END OF IT
** IF CONDITIONAL IS FALSE
*
LDA ]1
CMP ]3
IF ]2,E ; TEST FOR EQUALITY
BEQ _IFBOD
FIN
IF ]2,N ; NOT EQUAL
BNE _IFBOD
FIN
IF ]2,G ; GREATER THAN
BEQ SKPGT ; SKIP IF EQUAL TO
BCS _IFBOD
SKPGT
FIN
IF ]2,L ; LESS THAN
BCC _IFBOD
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS _IFBOD
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ _IFBOD
BCC _IFBOD
FIN
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
_WAIT
JMP (ADDR1)
*
_IFBOD
LDA SCRATCH
<<<
*
*``````````````````````````````*
* ENDIFB0 *
* *
* END AN IF BLOCK. THE IFB *
* COMMAND SEARCH THE PROGRAM *
* COUNTER UNTIL IT FINDS THE *
* MAGIC WORD BYTE SEQUENCE *
* HERE TO INDICATE AN ENDIF. *
* THIS CURRENT METHOD MEANS *
* NESTING IFB..ENDIFB BLOCKS *
* IS NOT POSSIBLE WITHOUT *
* EXITING ALL IFB BLOCKS. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ENDIFB0 MAC
*
JMP SKIPHEX
HEX 1B9B180906 ; MAGIC KEY
SKIPHEX
<<<
*
*``````````````````````````````*
* IFB1 *
* *
* EXECUTES BLOCK OF TEXT THAT *
* SITES BETWEEN IF STATEMENT *
* AND AN ELSE/ENDIF STATEMENT. *
* *
* ]1 = FIRST CONDITIONAL VAR *
* ]2 = CONDITIONAL *
* ]3 = SECOND TEST VARIABLE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFB1 MAC
*
STA SCRATCH
]PTR EQU *
LDA ]PTR
STA ADDR1
LDA ]PTR+1
STA ADDR1/$100
_LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$1C
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$9B
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$18
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$09
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$06
BNE _LOOP1
LDA ADDR1
*
** MAGIC KEY FOUND, NOW JUMP TO END OF IT
** IF CONDITIONAL IS FALSE
*
LDA ]1
CMP ]3
IF ]2,E ; TEST FOR EQUALITY
BEQ _IFBOD
FIN
IF ]2,N ; NOT EQUAL
BNE _IFBOD
FIN
IF ]2,G ; GREATER THAN
BEQ SKPGT ; SKIP IF EQUAL TO
BCS _IFBOD
SKPGT
FIN
IF ]2,L ; LESS THAN
BCC _IFBOD
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS _IFBOD
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ _IFBOD
BCC _IFBOD
FIN
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
JMP (ADDR1)
*
_IFBOD
LDA SCRATCH
<<<
*
*``````````````````````````````*
* ENDIFB1 *
* *
* END AN IF BLOCK. THE IFB *
* COMMAND SEARCH THE PROGRAM *
* COUNTER UNTIL IT FINDS THE *
* MAGIC WORD BYTE SEQUENCE *
* HERE TO INDICATE AN ENDIF. *
* THIS CURRENT METHOD MEANS *
* NESTING IFB..ENDIFB BLOCKS *
* IS NOT POSSIBLE WITHOUT *
* EXITING ALL IFB BLOCKS. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ENDIFB1 MAC
*
JMP SKIPHEX
HEX 1C9B180906 ; MAGIC KEY
SKIPHEX
<<<
*
*``````````````````````````````*
* IFB2 *
* *
* EXECUTES BLOCK OF TEXT THAT *
* SITES BETWEEN IF STATEMENT *
* AND AN ELSE/ENDIF STATEMENT. *
* *
* ]1 = FIRST CONDITIONAL VAR *
* ]2 = CONDITIONAL *
* ]3 = SECOND TEST VARIABLE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
IFB2 MAC
*
STA SCRATCH
]PTR EQU *
LDA ]PTR
STA ADDR1
LDA ]PTR+1
STA ADDR1/$100
_LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$1D
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$9B
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$18
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$09
BNE _LOOP1
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$06
BNE _LOOP1
LDA ADDR1
*
** MAGIC KEY FOUND, NOW JUMP TO END OF IT
** IF CONDITIONAL IS FALSE
*
LDA ]1
CMP ]3
IF ]2,E ; TEST FOR EQUALITY
BEQ _IFBOD
FIN
IF ]2,N ; NOT EQUAL
BNE _IFBOD
FIN
IF ]2,G ; GREATER THAN
BEQ SKPGT ; SKIP IF EQUAL TO
BCS _IFBOD
SKPGT
FIN
IF ]2,L ; LESS THAN
BCC _IFBOD
FIN
IF ]2,) ; GREATER THAN OR EQUAL
BCS _IFBOD
FIN
IF ]2,( ; LESS THAN OR EQUAL
BEQ _IFBOD
BCC _IFBOD
FIN
*
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
JMP (ADDR1)
*
_IFBOD
LDA SCRATCH
<<<
*
*``````````````````````````````*
* ENDIFB2 *
* *
* END AN IF BLOCK. THE IFB *
* COMMAND SEARCH THE PROGRAM *
* COUNTER UNTIL IT FINDS THE *
* MAGIC WORD BYTE SEQUENCE *
* HERE TO INDICATE AN ENDIF. *
* THIS CURRENT METHOD MEANS *
* NESTING IFB..ENDIFB BLOCKS *
* IS NOT POSSIBLE WITHOUT *
* EXITING ALL IFB BLOCKS. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ENDIFB2 MAC
*
JMP SKIPHEX
HEX 1D9B180906 ; MAGIC KEY
SKIPHEX
<<<
-229
View File
@@ -1,229 +0,0 @@
*
*``````````````````````````````*
* LOOP *
* *
* STARTS A DO/WHILE / DO/UNTIL *
* LOOP. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
LOOP MAC
]PTR EQU *
STA SCRATCH ; BACKUP .A
LDA #>]PTR ; GET HIBYTE OF PROGRAM COUNTER
PHA ; PUSH TO STACK
LDA #<]PTR ; GET LOBYTE OF PC
PHA ; PUSH TO STACK
LDA SCRATCH ; RESTORE ORIGINAL .A
<<<
*
*``````````````````````````````*
* UNTIL *
* *
* CONDITIONAL AT END OF LOOP *
* THAT DETERMINES IF THE LOOP *
* WILL CONTINUE OR END. *
* *
* PARAMETERS *
* *
* ]1 = FIRST COMPARISON VAR *
* ]2 = COMPARISON OPERATOR *
* ]3 = SECOND COMPARISON VAR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
UNTIL MAC
STA SCRATCH ; BACKUP .A
LDA ]1 ; LOAD FIRST CONDITIONAL VAR
CMP ]3 ; COMPARE TO SECOND CONDITIONAL
*
IF ]2,E ; IF ]2 = E, TEST FOR EQUALITY
BEQ _LEXIT ; IF ]1 = ]3, EXIT LOOP
FIN
IF ]2,N ; IF ]2 = N, TEST FOR NOT EQUAL
BNE _LEXIT ; IF ]1 != ]3, EXIT LOOP
FIN
IF ]2,G ; IF ]2 = G, TEST FOR GREATER THAN
BEQ SKPGT ; IF ]1 = ]3, SKIP TEST
BCS _LEXIT ; IF ]2 > ]3, EXIT LOOP
SKPGT
FIN
IF ]2,L ; IF ]2 = L, TEST FOR LESS THAN
BCC _LEXIT ; IF ]1 < ]3, EXIT
FIN
IF ]2,) ; IF ]2 = ), TEST FOR >=
BCS _LEXIT ; IF ]1 >= ]3, EXIT LOOP
FIN
IF ]2,( ; IF ]2 = (, TEST FOR <=
BEQ _LEXIT ; IF ]1 = ]3, EXIT LOOP
BCC _LEXIT ; IF ]1 < ]3, EXIT LOOP
FIN
*
** CONDITIONAL IS FALSE; CONTINUE LOOPING
*
PLA ; PULL OLD PROGRAM COUNTER
STA ADDR1 ; FROM STACK (LOBYTE)
PLA ; GET PC HIBYTE
STA ADDR1+1
LDA SCRATCH ; RESTORE BACKED UP .A
JMP (ADDR1) ; JUMP BACK TO LOOP COMMAND
*
_LEXIT
PLA ; CLEAR PC LOBYTE
PLA ; CLEAR PC HIBYTE FROM STACK
LDA SCRATCH ; RESTORE BACKED UP .A
<<<
*
*``````````````````````````````*
* WHILE *
* *
* CONDITIONAL AT END OF LOOP *
* THAT DETERMINES IF THE LOOP *
* WILL CONTINUE OR END. *
* *
* PARAMETERS *
* *
* ]1 = FIRST COMPARISON VAR *
* ]2 = COMPARISON OPERATOR *
* ]3 = SECOND COMPARISON VAR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
WHILE MAC
STA SCRATCH ; BACKUP .A
LDA ]1 ; COMPARE ]1
CMP ]3 ; TO ]3
*
IF ]2,E ; IF ]2 = E, THEN TEST FOR =
BEQ _LJUMP ; IF ]1 = ]3, CONTINUE LOOP
FIN
IF ]2,N ; IF ]2 = N, TEST FOR !=
BNE _LJUMP ; IF ]1 != ]3, CONTINUE LOOP
FIN
IF ]2,G ; IF ]2 = G, THEN TEST FOR >
BEQ SKPGT ; SKIP TEST IF ]1 = ]3
BCS _LJUMP ; IF ]1 > ]3, CONTINUE LOOP
SKPGT
FIN
IF ]2,L ; IF ]2 = L, TEST FOR <
BCC _LJUMP ; IF ]1 < ]3, CONTINUE LOOP
FIN
IF ]2,) ; IF ]2 = ), TEST FOR >=
BCS _LJUMP ; IF ]1 >= ]3, CONTINUE LOOP
FIN
IF ]2,( ; IF ]2 = (, TEST FOR <=
BEQ _LJUMP ; IF ]1 = ]3
BCC _LJUMP ; OR ]1 < ]3, CONTINUE LOOP
FIN
JMP _LEXIT ; OTHERWISE, EXIT LOOP
*
** STILL TRUE; CONTINUE LOOP
*
_LJUMP
PLA ; GET LOOP COMMAND ADDRESS
STA ADDR1 ; LOBYTE
PLA ; GET ADDRESS HIBYTE
STA ADDR1+1
LDA SCRATCH ; RESTORE .A
JMP (ADDR1) ; JUMP BACK TO LOOP COMMAND
*
_LEXIT
PLA ; POP LOOP ADDRESS LOBYTE
PLA ; POP LOOP ADDRESS HIBYTE
LDA SCRATCH ; RESTORE .A
<<<
*
*``````````````````````````````*
* FOR *
* *
* START A FOR..NEXT LOOP *
* *
* PARAMETERS *
* *
* ]1 = COUNTER MEM LOCATION *
* ]2 = COUNTER LOW *
* ]3 = COUNTER HIGH *
* ]4 = COUNTER STEP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
FOR MAC
STA SCRATCH ; BACKUP .A
LDA ]1 ; GET LOBYTE OF COUNTER VAR
STA ADDR4
LDA ]1/$100 ; GET HIBYTE
STA ADDR4+1
LDY #0 ; STORE MINVAL IN COUNTER
LDA ]2
STA (ADDR4),Y
INY
LDA ]2/$100 ; STORE HIBYTE OF MINVAL
STA (ADDR4),Y
LDA SCRATCH ; RESTORE .A
*
]PTR EQU *
LDA #>]PTR ; GET PROGRAM COUNTER
PHA ; HIBYTE AND PUSH
LDA #<]PTR ; GET PROGRAM COUNTER
PHA ; LOBYTE AND PUSH
LDA ]1/$100 ; GET COUNTER ADDRESS
PHA ; HIBYTE AND PUSH
LDA ]1 ; GET COUNTER ADDRESS
PHA ; LOBYTE AND PUSH
LDA ]3/$100 ; GET COUNTER MAX
PHA ; HIBYTE AND PUSH
LDA ]3 ; GET COUNTER MAX
PHA ; LOBYTE AND PUSH
LDA ]4/$100 ; GET STEP HIBYTE
PHA ; AND PUSH
LDA ]4 ; GET STEP LOBYTE
PHA ; AND PUSH
<<<
*
*``````````````````````````````*
* NEXT *
* *
* END A FOR..NEXT LOOP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
NEXT MAC
JMP _VAR ; SKIP VARIABLE BYTES
]STEP DS 2 ; STEP WORD
]HIGH DS 2 ; COUNTER MAX WORD
]SCRATCH DS 2 ; LOCAL SCRATCH
_VAR
PLA ; GET STEP
STA ]STEP ; LOBYTE
PLA ; AND HIBYTE
STA ]STEP+1
PLA ; GET COUNTER MAX
STA ]HIGH ; LOBYTE
PLA ; AND HIBYTE
STA ]HIGH+1
PLA ; GET COUNTER ADDRESS
STA ADDR4 ; LOBYTE
PLA ; AND HIBYTE
STA ADDR4+1
PLA ; GET FOR COMMAND ADDRESS
STA ADDR2 ; LOBYTE
PLA ; AND HIBYTE
STA ADDR2+1
*
LDY #0 ; GET THE COUNTER
LDA (ADDR4),Y
CMP ]HIGH ; IF LOBYTE != MAX LOBYTE
BCC LOOPER ; CONTINUE THE LOOPING
INY
LDA (ADDR4),Y ; NOW TEST THE LOBYTES
CMP ]HIGH+1
BCC LOOPER ; CONTINUE THE LOOPER
JMP _EXIT ; OTHERWISE, FINISHED LOOPING
LOOPER
LDY #0 ; INCREASE THE COUNTER
LDA (ADDR4),Y
CLC
ADC ]STEP ; BY THE STEP AMOUNT
STA (ADDR4),Y
INY
LDA (ADDR4),Y
ADC ]STEP+1
STA (ADDR4),Y
JMP (ADDR2) ; JUMP BACK TO FOR COMMAND
_EXIT
<<<
@@ -1,20 +0,0 @@
JUMPTBL JMP MAIN_START
DS 48
VARTAB DS 20
RETLEN DS 1
RETURN DS 256
PARLEN DS 1
PARAM DS 256
ADDR1 EQU $06
ADDR2 EQU $08
ADDR3 EQU $EB
ADDR4 EQU $ED
SCRATCH EQU $19
SCRATCH2 EQU $1E
RETADR EQU $FE
RESULT EQU $FA
RESULT2 EQU $FC
REENTRY EQU $3D0
IFDEPTH DS 1,$FF
MAIN_START
@@ -1,2 +0,0 @@
ARRMAX EQU 8192
@@ -1,19 +0,0 @@
COUT1 EQU $FDF0
COUT EQU $FDED
HOME EQU $FC58
VTAB EQU $FC22
CURSH EQU $24
CURSV EQU $25
KEYBUFF EQU $0200
GSTROBE EQU $C040
GBCALC EQU $F847
GBPSH EQU $26
KYBD EQU $C000
STROBE EQU $C010
GETLN EQU $FD6F
GETKEY EQU $FD0C
PREAD EQU $FB1E
PB0 EQU $C061
PB1 EQU $C062
PB2 EQU $C063
PB3 EQU $C060
-175
View File
@@ -1,175 +0,0 @@
]RIGHT DS 1
]LEFT DS 1
]LENGTH DS 1
]A DS 1
]X DS 1
]Y DS 1
]C DS 1
]Z DS 1
]N DS 1
]O DS 1
]HEXTAB ASC "0123456789ABCDEF"
]COUT EQU $FDF0
]KYBD EQU $C000
]STROBE EQU $C010
__GETRET
STA ADDR1
STX ADDR1+1
LDY #255
:LP
INY
LDA RETURN,Y
STA (ADDR1),Y ; COUNTER OFFSET
CPY RETLEN
BNE :LP
RTS
__SETPARM
STA ADDR1
STX ADDR1+1
STY PARLEN
LDY #255
:LP
INY
LDA (ADDR1),Y
STA PARAM,Y ; OFFSET BY COUNTER
CPY PARLEN
BNE :LP
RTS
__CLRHI
AND #$F0
LSR
LSR
LSR
LSR
RTS
__DUMP
STY ]LENGTH
STA ADDR1
STX ADDR1+1
LDA #$8D
JSR ]COUT
LDA ADDR1+1
JSR __CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1+1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
JSR __CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA #":" ;
JSR ]COUT
LDA #" "
JSR ]COUT
LDY #0
:LP
LDA (ADDR1),Y
JSR __CLRHI ; AT COUNTER OFFSET
STA ]LEFT
LDA (ADDR1),Y
AND #$0F
STA ]RIGHT
LDX ]LEFT
LDA ]HEXTAB,X
JSR ]COUT
LDX ]RIGHT
LDA ]HEXTAB,X
JSR ]COUT
LDA #160
JSR ]COUT
INY
CPY ]LENGTH
BNE :LP
RTS
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR ]COUT
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA ; IF NEEDED
LDA ADDR1
PHA
RTS
__W
:LP LDA ]KYBD
BPL :LP
AND #$7F
STA ]STROBE
RTS
__RSAV
STA ]A
STX ]X
STY ]Y
:C BCC :C0
BCS :C1
:Z BEQ :Z1
BNE :Z0
:N BMI :N1
BPL :N0
:O BVC :O0
BVS :O1
JMP :EXIT
:C0 LDA #0
STA ]C
JMP :Z
:C1 LDA #1
STA ]C
JMP :Z
:Z1 LDA #1
STA ]Z
JMP :N
:Z0 LDA #0
STA ]Z
JMP :N
:N1 LDA #1
STA ]N
JMP :O
:N0 LDA #0
STA ]N
JMP :O
:O0 LDA #0
STA ]O
JMP :EXIT
:O1 LDA #1
STA ]O
:EXIT
RTS
__ERRH
LDA #1
STA $AAB6
STA $75+1
STA $33
STA ADDR1
STX ADDR1+1
LDA #$FF
STA $D8
LDY #0
LDA (ADDR1),Y
STA $9D5A
INY
LDA (ADDR1),Y
STA $9D5B
RTS
@@ -1,142 +0,0 @@
@GOTO MAC
JMP ]1
<<<
@GOSUB MAC
JSR ]1
<<<
@RETURN MAC
RTS
<<<
@END MAC
JMP REENTRY
<<<
@ONERR MAC
ERRH ]1
<<<
@PRINT MAC
PRN ]1
<<<
@INPUT MAC
INP
GRET ]1
<<<
@GET MAC
GKEY
STA RETURN
LDY #1
STA RETLEN
<<<
@HOME MAC
JSR $FC58
<<<
@HTAB MAC
SETCX ]1
<<<
@VTAB MAC
SETCY ]1
<<<
@TEXT MAC
LDA $C051
<<<
@LABEL MAC
]1
<<<
@DATA MAC
JSR REENTRY
HEX ]1
<<<
@POKE MAC
LDY #0
LDA ]1
STA ADDR1
LDA ]1/$100
STA ADDR1+1
LDA ]2
STA (ADDR1),Y
<<<
@PEEK MAC
LDA ]1
STA ADDR1
LDA ]1/$100
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
STA RETURN
LDA #1
STA RETLEN
<<<
@CALL MAC
JSR ]1
<<<
@PDL MAC
PDL #0
<<<
@POS MAC
LDA $24
STA RETURN
LDY #1
STA RETURN
<<<
@INVERT MAC
LDA #$3F
STA $0032
<<<
@FLASH MAC
LDA #$7F
STA $0032
<<<
@NORMAL MAC
LDA #$FF
STA $0032
<<<
@STOP MAC
JMP REENTRY
<<<
@FOR MAC
FOR ]1;]2;]3;]4
<<<
@NEXT MAC
NEXT
<<<
@DIM1 MAC
DIM161 ]1;]2;]3;#0
<<<
@DIM2 MAC
DIM162 ]1;]2;]3;]4;#0
<<<
@LET MAC
<<<
@POP MAC
PLA
PLA
<<<
@IFGOTO MAC
IFJ ]1;]2;]3
<<<
@IFGSUB MAC
IFS ]1;]2;]3
<<<
@IFTHEN MAC
IFB ]1;]2;]3
<<<
@ENDIF MAC
ENDIFB
<<<
@GR MAC
<<<
@COLOR MAC
<<<
@PLOT MAC
<<<
@HLIN MAC
<<<
@VLIN MAC
<<<
@HGR MAC
<<<
@HGR2 MAC
<<<
@HPLOT MAC
<<<
@HCOLOR MAC
<<<
-95
View File
@@ -1,95 +0,0 @@
DIM81 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
JSR ADIM81
<<<
GET81 MAC
_ISLIT ]1
LDA ]2
PHA
JSR AGET81
<<<
PUT81 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
JSR APUT81
<<<
DIM82 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
LDA ]5
PHA
JSR ADIM82
<<<
GET82 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
JSR AGET82
<<<
PUT82 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
LDA ]4
PHA
JSR APUT82
<<<
DIM161 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
LDA ]4
PHA
JSR ADIM161
<<<
PUT161 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
JSR APUT161
<<<
GET161 MAC
_ISLIT ]1
_ISLIT ]2
JSR AGET161
<<<
DIM162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
LDA ]4
PHA
LDA ]5
PHA
JSR ADIM162
<<<
PUT162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
_ISLIT ]4
JSR APUT162
<<<
GET162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
JSR AGET162
<<<
@@ -1,94 +0,0 @@
DIM81 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
JSR ADIM81
<<<
GET81 MAC
_AXLIT ]1
LDY ]2
JSR AGET81
<<<
PUT81 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
JSR APUT81
<<<
DIM82 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
LDA ]5
PHA
JSR ADIM82
<<<
GET82 MAC
_ISLIT ]1
LDA ]2
PHA
LDA ]3
PHA
JSR AGET82
<<<
PUT82 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
LDA ]4
PHA
JSR APUT82
<<<
DIM161 MAC
_ISLIT ]1
_ISLIT ]2
LDA ]3
PHA
LDA ]4
PHA
JSR ADIM161
<<<
PUT161 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
JSR APUT161
<<<
GET161 MAC
_ISLIT ]1
_ISLIT ]2
JSR AGET161
<<<
DIM162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
LDA ]4
PHA
LDA ]5
PHA
JSR ADIM162
<<<
PUT162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
_ISLIT ]4
JSR APUT162
<<<
GET162 MAC
_ISLIT ]1
_ISLIT ]2
_ISLIT ]3
JSR AGET162
<<<
-450
View File
@@ -1,450 +0,0 @@
IFJ MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ ]J4
FIN
IF ]2,N
BNE ]J4
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
FIN
JMP ]EXIT
]J4
LDA SCRATCH
JMP ]4
]EXIT
LDA SCRATCH
<<<
IFJE MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ ]J4
JMP ]5
FIN
IF ]2,N
BNE ]J4
JMP ]5
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
JMP ]5
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
JMP ]5
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
JMP ]5
FIN
JMP ]EXIT
]J4
LDA SCRATCH
JMP ]4
]EXIT
LDA SCRATCH
<<<
IFRJ MAC
STA SCRATCH
STX RESULT
STY RESULT+1
IF ]1,A
LDA SCRATCH
FIN
IF ]1,X
LDA RESULT
FIN
IF ]1,Y
LDA RESULT+1
FIN
CMP ]3
IF ]2,E
BEQ ]J4
FIN
IF ]2,N
BNE ]J4
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
FIN
JMP ]EXIT
]J4
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JMP ]4
]EXIT
LDA SCRATCH
LDX RESULT
LDY RESULT+1
<<<
IFRJE MAC
STA SCRATCH
STX RESULT
STY RESULT+1
IF ]1,A
LDA SCRATCH
FIN
IF ]1,X
LDA RESULT
FIN
IF ]1,Y
LDA RESULT+1
FIN
CMP ]3
IF ]2,E
BEQ ]J4
JMP ]5
FIN
IF ]2,N
BNE ]J4
JMP ]5
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
JMP ]5
FIN
IF ]2,L
BCC ]J4
JMP ]5
FIN
IF ]2,)
BCS ]J4
JMP ]5
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
JMP ]5
FIN
JMP ]EXIT
]J4
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JMP ]4
]EXIT
LDA SCRATCH
LDX RESULT
LDY RESULT+1
<<<
IFS MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ ]J4
FIN
IF ]2,N
BNE ]J4
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
FIN
LDA SCRATCH
JMP ]EXIT
]J4
LDA SCRATCH
JSR ]4
]EXIT
<<<
IFSE MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,N
BNE ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
LDA SCRATCH
JSR ]5
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
LDA SCRATCH
JSR ]5
FIN
LDA SCRATCH
JMP ]EXIT
]J4
LDA SCRATCH
JSR ]4
]EXIT
<<<
IFRS MAC
STA SCRATCH
STX RESULT
STY RESULT+1
IF ]1,A
LDA SCRATCH
FIN
IF ]1,X
LDA RESULT
FIN
IF ]1,Y
LDA RESULT+1
FIN
CMP ]3
IF ]2,E
BEQ ]J4
FIN
IF ]2,N
BNE ]J4
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
FIN
IF ]2,L
BCC ]J4
FIN
IF ]2,)
BCS ]J4
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
FIN
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JMP ]EXIT
]J4
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JSR ]4
]EXIT
<<<
IFRSE MAC
STA SCRATCH
STX RESULT
STY RESULT+1
IF ]1,A
LDA SCRATCH
FIN
IF ]1,X
LDA RESULT
FIN
IF ]1,Y
LDA RESULT+1
FIN
CMP ]3
IF ]2,E
BEQ ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,N
BNE ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,G
BEQ ]SKPGT
BCS ]J4
]SKPGT
LDA SCRATCH
JSR ]5
FIN
IF ]2,L
BCC ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,)
BCS ]J4
LDA SCRATCH
JSR ]5
FIN
IF ]2,(
BEQ ]J4
BCC ]J4
LDA SCRATCH
JSR ]5
FIN
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JMP ]EXIT
]J4
LDA SCRATCH
LDX RESULT
LDY RESULT+1
JSR ]4
]EXIT
<<<
IFB MAC
STA SCRATCH
]PTR EQU *
LDA ]PTR
STA ADDR1
LDA ]PTR+1
STA ADDR1/$100
_LOOP1
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$1B
BNE _LOOP1
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$9B
BNE _LOOP1
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$18
BNE _LOOP1
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$09
BNE _LOOP1
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
LDY #0
LDA (ADDR1),Y
CMP #$06
BNE _LOOP1
LDA ADDR1
LDA ]1
CMP ]3
IF ]2,E
BEQ _IFBOD
FIN
IF ]2,N
BNE _IFBOD
FIN
IF ]2,G
BEQ SKPGT
BCS _IFBOD
SKPGT
FIN
IF ]2,L
BCC _IFBOD
FIN
IF ]2,)
BCS _IFBOD
FIN
IF ]2,(
BEQ _IFBOD
BCC _IFBOD
FIN
_PRN "NOPE",8D8D
LDA ADDR1
CLC
ADC #1
STA ADDR1
LDA ADDR1+1
ADC #0
STA ADDR1+1
JMP (ADDR1)
_IFBOD
_PRN "YEP",8D8D
LDA SCRATCH
<<<
ENDIFB MAC
JMP SKIPHEX
HEX 1B9B180906
SKIPHEX
<<<
@@ -1,158 +0,0 @@
LOOP MAC
]PTR EQU *
STA SCRATCH
LDA #>]PTR
PHA
LDA #<]PTR
PHA
LDA SCRATCH
<<<
UNTIL MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ _LEXIT
FIN
IF ]2,N
BNE _LEXIT
FIN
IF ]2,G
BEQ SKPGT
BCS _LEXIT
SKPGT
FIN
IF ]2,L
BCC _LEXIT
FIN
IF ]2,)
BCS _LEXIT
FIN
IF ]2,(
BEQ _LEXIT
BCC _LEXIT
FIN
PLA
STA ADDR1
PLA
STA ADDR1+1
LDA SCRATCH
JMP (ADDR1)
_LEXIT
PLA
PLA
LDA SCRATCH
<<<
WHILE MAC
STA SCRATCH
LDA ]1
CMP ]3
IF ]2,E
BEQ _LJUMP
FIN
IF ]2,N
BNE _LJUMP
FIN
IF ]2,G
BEQ SKPGT
BCS _LJUMP
SKPGT
FIN
IF ]2,L
BCC _LJUMP
FIN
IF ]2,)
BCS _LJUMP
FIN
IF ]2,(
BEQ _LJUMP
BCC _LJUMP
FIN
JMP _LEXIT
_LJUMP
PLA
STA ADDR1
PLA
STA ADDR1+1
LDA SCRATCH
JMP (ADDR1)
_LEXIT
PLA
PLA
LDA SCRATCH
<<<
FOR MAC
STA SCRATCH
LDA ]1
STA ADDR4
LDA ]1/$100
STA ADDR4+1
LDY #0
LDA ]2
STA (ADDR4),Y
INY
LDA ]2/$100
STA (ADDR4),Y
LDA SCRATCH
]PTR EQU *
LDA #>]PTR
PHA
LDA #<]PTR
PHA
LDA ]1/$100
PHA
LDA ]1
PHA
LDA ]3/$100
PHA
LDA ]3
PHA
LDA ]4/$100
PHA
LDA ]4
PHA
<<<
NEXT MAC
JMP _VAR
]STEP DS 2
]HIGH DS 2
]SCRATCH DS 2
_VAR
PLA
STA ]STEP
PLA
STA ]STEP+1
PLA
STA ]HIGH
PLA
STA ]HIGH+1
PLA
STA ADDR4
PLA
STA ADDR4+1
PLA
STA ADDR2
PLA
STA ADDR2+1
LDY #0
LDA (ADDR4),Y
CMP ]HIGH
BCC LOOPER
INY
LDA (ADDR4),Y
CMP ]HIGH+1
BCC LOOPER
JMP _EXIT
LOOPER
LDY #0
LDA (ADDR4),Y
CLC
ADC ]STEP
STA (ADDR4),Y
INY
LDA (ADDR4),Y
ADC ]STEP+1
STA (ADDR4),Y
JMP (ADDR2)
_EXIT
<<<
@@ -1,79 +0,0 @@
_ISLIT MAC
IF #=]1
LDA ]1/$100
PHA
LDA ]1
PHA
ELSE
LDA ]1+1
PHA
LDA ]1
PHA
FIN
<<<
_AXLIT MAC
IF #=]1
LDX ]1/$100
LDA ]1
ELSE
LDX ]1+1
LDA ]1
FIN
<<<
_ISSTR MAC
IF "=]1
JMP __STRCONT
]STRTMP STR ]1
__STRCONT
LDA #>]STRTMP
PHA
LDA #<]STRTMP
PHA
ELSE
_ISLIT ]1
FIN
<<<
_AXSTR MAC
IF "=]1
JMP __STRCNT2
]STRTMP STR ]1
__STRCNT2
LDX #>]STRTMP
LDA #<]STRTMP
ELSE
_AXLIT ]1
FIN
<<<
GRET MAC
_AXLIT ]1
JSR __GETRET
<<<
SPAR MAC
LDY ]2
_AXLIT ]1
JSR __SETPARM
<<<
DUMP MAC
_AXLIT ]1
LDY ]2
JSR __DUMP
<<<
_PRN MAC
JSR __P
ASC ]1
HEX 00
<<<
_WAIT MAC
JSR __W
<<<
ERRH MAC
_AXLIT
JSR __ERRH
<<<
RSAV MAC
JSR __RSAV
<<<
CLRHI MAC
LDA ]1
JSR __CLRHI
<<<
-173
View File
@@ -1,173 +0,0 @@
PRN MAC
IF ",]1
JSR XPRINT ; SPECIAL PRINT
ASC ]1 ; PUT STRING HERE
HEX 00 ; STRING TERMINATE
ELSE ; ELSE, PARAM IS
; MEMORY LOCATION
_ISLIT ]1
JSR DPRINT
FIN
<<<
SPRN MAC
_AXLIT ]1
JSR PRNSTR
<<<
INP MAC
JSR SINPUT
<<<
GKEY MAC
JSR GETKEY
LDY #0
STY STROBE
<<<
SCPOS MAC
LDX ]1
STX CURSH
LDX ]2
STX CURSV
JSR VTAB
<<<
SETCX MAC
LDX ]1
STX CURSH
JSR VTAB
<<<
SETCY MAC
LDY ]1
STY CURSV
JSR VTAB
<<<
CURF MAC
LDA ]1
CLC ; POS
ADC CURSH
STA CURSH
JSR VTAB
<<<
CURB MAC
LDA CURSH
SEC
SBC ]1
STA CURSH
JSR VTAB
<<<
CURU MAC
LDA CURSV
SEC
SBC ]1
STA CURSV
JSR VTAB
<<<
CURD MAC
LDA CURSV
CLC
ADC ]1
STA CURSV
JSR VTAB
<<<
RCPOS MAC
LDY ]1
LDA ]2
JSR GBCALC
LDA (GBPSH),Y
<<<
PDL MAC
LDX ]1
JSR PREAD
<<<
PBX MAC
_ISLIT ]1
JSR GPBX
<<<
TVLIN MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
JSR TVLINE
<<<
THLIN MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
JSR THLINE
<<<
TRECF MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
LDA ]5
PHA
JSR TRECTF
<<<
TPUT MAC
LDX ]1
LDY ]2
LDA ]3
JSR TXTPUT
<<<
DIE80 MAC
LDA #21
JSR COUT
<<<
COL80 MAC
LDA #18
JSR COUT
<<<
COL40 MAC
LDA #17
JSR COUT
<<<
MTXT0 MAC
LDA #24
JSR COUT
<<<
MTXT1 MAC
LDA #27
JSR COUT
<<<
WAIT MAC
]WTLP LDA KYBD
BPL ]WTLP
AND #$7F
STA STROBE
<<<
TLINE MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
LDA ]5
PHA
JSR TBLINE
<<<
TCIRC MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
LDA ]4
PHA
JSR TCIRCLE
<<<
@@ -1,98 +0,0 @@
]MSIZE EQU VARTAB
]ASIZE EQU VARTAB+2
]ASZBAK EQU VARTAB+4
]ESIZE EQU VARTAB+6
]ESZBAK EQU VARTAB+7
]FILL EQU VARTAB+8
ADIM161
PLA
TAX
PLA
TAY
PLA
STA ]FILL
PLA
STA ]ESIZE
STA ]ESZBAK
PLA
STA ]ASIZE
STA ]ASZBAK
PLA
STA ]ASIZE+1
STA ]ASZBAK+1
STA SCRATCH
PLA
STA ADDR1
STA ADDR2
PLA
STA ADDR1+1
STA ADDR2+1
TYA
PHA
TXA
PHA
LDY #0
LDA #0
BEQ :ENTLP
:DOADD
CLC
ADC ]ASIZE
TAX
TYA
ADC SCRATCH
TAY
TXA
:LP
ASL ]ASIZE
ROL SCRATCH
:ENTLP
LSR ]ESIZE
BCS :DOADD
BNE :LP
CLC
TXA
ADC #3
STA ]MSIZE
TYA
ADC #0
STA ]MSIZE+1
LDA ]FILL
LDX ]MSIZE+1
BEQ :PART
LDY #0
:FULL
STA (ADDR1),Y
INY
BNE :FULL
INC ADDR1+1
DEX
BNE :FULL
:PART
LDX ]MSIZE
BEQ :MFEXIT
LDY #0
:PARTLP
STA (ADDR1),Y
INY
DEX
BNE :PARTLP
:MFEXIT
LDY #0
LDA ]ASZBAK
STA (ADDR2),Y
INY
LDA ]ASZBAK+1
STA (ADDR2),Y
INY
LDA ]ESZBAK
STA (ADDR2),Y
LDX ADDR1
LDY ADDR1+1
LDA ]MSIZE
STA RETURN
LDA ]MSIZE+1
STA RETURN+1
LDA #2
STA RETLEN
LDA ]ASZBAK
RTS
-153
View File
@@ -1,153 +0,0 @@
]PROD EQU VARTAB
]AXSIZE EQU VARTAB+4
]AYSIZE EQU VARTAB+6
]AXBAK EQU VARTAB+8
]AYBAK EQU VARTAB+10
]MLIER EQU VARTAB+12
]MCAND EQU VARTAB+14
]FILL EQU VARTAB+16
]ELEN EQU VARTAB+17
ADIM162
PLA
TAX
PLA
TAY
PLA
STA ]FILL
PLA
STA ]ELEN
PLA
STA ]AYSIZE
STA ]AYBAK
STA ]MCAND
PLA
STA ]AYSIZE+1
STA ]AYBAK+1
STA ]MCAND+1
PLA
STA ]AXSIZE
STA ]AXBAK
STA ]MLIER
PLA
STA ]AXSIZE+1
STA ]AXBAK+1
STA ]MLIER+1
PLA
STA ADDR1
STA ADDR4 ; LOBYTE
PLA
STA ADDR1+1
STA ADDR4+1
TYA
PHA
TXA
PHA
LDA #0
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFT_R
LSR ]MLIER+1
ROR ]MLIER
BCC :ROT_R
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROT_R
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFT_R
LDA ]ELEN
STA ]MCAND
LDA #0
STA ]MCAND+1 ;
LDA ]PROD
STA ]MLIER
LDA ]PROD+1
STA ]MLIER+1
LDA #0
STA ]PROD
STA ]PROD+1
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFTR LSR ]MLIER+1
ROR ]MLIER
BCC :ROTR
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROTR
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFTR
CLC
LDA ]PROD
ADC #5
STA ]PROD
LDA ]PROD+1
ADC #0
STA ]PROD+1
LDA ]FILL
LDX ]PROD+1
BEQ :PART
LDY #0
:FULL
STA (ADDR1),Y
INY
BNE :FULL
INC ADDR1+1
DEX
BNE :FULL
:PART
LDX ]PROD
BEQ :MFEXIT
LDY #0
:PARTLP
STA (ADDR1),Y
INY
DEX
BNE :PARTLP
:MFEXIT
LDY #0
LDA ]AXBAK
STA (ADDR4),Y
INY
LDA ]AXBAK+1
STA (ADDR4),Y
INY
LDA ]AYBAK
STA (ADDR4),Y
INY
LDA ]AYBAK+1
STA (ADDR4),Y
INY
LDA ]ELEN
STA (ADDR4),Y
LDX ADDR4
LDX ADDR4+1
LDA ]PROD
STA RETURN
LDA ]PROD+1
STA RETURN+1
LDA ]PROD+2
STA RETURN+2
LDA ]PROD+3
STA RETURN+3
LDA #4
STA RETLEN
RTS
@@ -1,80 +0,0 @@
]ESIZE EQU VARTAB
]ESIZEB EQU VARTAB+1
]ASIZE EQU VARTAB+2
]AIDX EQU VARTAB+4
]IDX EQU VARTAB+6
AGET161
PLA
TAX
PLA
TAY
PLA
STA ]AIDX
STA ]IDX
PLA
STA ]AIDX+1
STA SCRATCH
PLA
STA ADDR4
PLA
STA ADDR4+1
TYA
PHA
TXA
PHA
LDY #0
LDA (ADDR4),Y
STA ]ASIZE
LDY #1
LDA (ADDR4),Y
STA ]ASIZE+1
INY
LDA (ADDR4),Y
STA ]ESIZE
STA ]ESIZEB
LDY #0
LDA #0
BEQ :ENTLPA
:DOADD
CLC
ADC ]AIDX
TAX
TYA
ADC SCRATCH
TAY
TXA
:LPA
ASL ]AIDX
ROL SCRATCH
:ENTLPA
LSR ]ESIZE
BCS :DOADD
BNE :LPA
STX ]IDX
STY ]IDX+1
LDA #3
CLC
ADC ]IDX
STA ADDR2
LDA ]IDX+1
ADC #0
STA ADDR2+1
LDA ADDR2
CLC
ADC ADDR4
STA ADDR2
LDA ADDR2+1
ADC ADDR4+1
STA ADDR2+1
LDY #0
:LP
LDA (ADDR2),Y
STA RETURN,Y
INY
CPY ]ESIZEB
BNE :LP
LDA ]ESIZEB
STA RETLEN
LDY ADDR2+1
LDX ADDR2
RTS
-145
View File
@@ -1,145 +0,0 @@
]ESIZE EQU VARTAB
]XIDX EQU VARTAB+2
]YIDX EQU VARTAB+4
]MCAND EQU VARTAB+6
]MLIER EQU VARTAB+8
]PROD EQU VARTAB+10
]PBAK EQU VARTAB+14
]XLEN EQU VARTAB+16
]YLEN EQU VARTAB+18
AGET162
PLA
TAX
PLA
TAY
PLA
STA ]YIDX
PLA
STA ]YIDX+1
PLA
STA ]XIDX
PLA
STA ]XIDX+1
PLA
STA ADDR4
PLA
STA ADDR4+1
TYA
PHA
TXA
PHA
LDY #4
LDA (ADDR4),Y
STA ]ESIZE
LDY #0
LDA (ADDR4),Y
STA ]XLEN
LDY #1
LDA (ADDR4),Y
STA ]XLEN+1
LDY #2
LDA (ADDR4),Y
STA ]YLEN
LDY #3
LDA (ADDR4),Y
STA ]YLEN+1
LDY #0
LDA ]YIDX
STA ]MLIER
LDA ]YIDX+1
STA ]MLIER+1
LDA ]YLEN
STA ]MCAND
LDA ]YLEN+1
STA ]MCAND+1
LDA #00
STA ]PROD
STA ]PROD+1
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFT_R
LSR ]MLIER+1
ROR ]MLIER
BCC :ROT_R
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROT_R
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFT_R
LDA ]PROD
STA ]PBAK ; 1ST AND 2ND BYTES
LDA ]PROD+1
STA ]PBAK+1
LDA ]XIDX
STA ]MLIER
LDA ]XIDX+1
STA ]MLIER+1
LDA ]ESIZE
STA ]MCAND
LDA #0
STA ]MCAND+1
STA ]PROD
STA ]PROD+1
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFTR LSR ]MLIER+1
ROR ]MLIER
BCC :ROTR
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROTR
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFTR
CLC
LDA ]PROD
ADC ]PBAK
STA ]PROD
LDA ]PROD+1
ADC ]PBAK+1
STA ]PROD+1
CLC
LDA ]PROD
ADC #5
STA ]PROD
LDA ]PROD+1
ADC #0
STA ]PROD+1
CLC
LDA ]PROD
ADC ADDR4
STA ADDR2
LDA ]PROD+1
ADC ADDR4+1
STA ADDR2+1
LDY #0
:CLP
LDA (ADDR2),Y
STA RETURN,Y
INY
CPY ]ESIZE
BNE :CLP
LDA ]ESIZE
STA RETLEN
LDY ADDR2+1
LDX ADDR2
RTS
@@ -1,84 +0,0 @@
]ESIZE EQU VARTAB
]ESIZEB EQU VARTAB+1
]ASIZE EQU VARTAB+2
]AIDX EQU VARTAB+4
]IDX EQU VARTAB+6
APUT161
PLA
TAX
PLA
TAY
PLA
STA ]AIDX
STA ]IDX
PLA
STA ]AIDX+1
STA ]IDX+1
STA SCRATCH
PLA
STA ADDR4
PLA
STA ADDR4+1
PLA
STA ADDR3
PLA
STA ADDR3+1
TYA
PHA
TXA
PHA
LDY #0
LDA (ADDR4),Y
STA ]ASIZE
LDY #1
LDA (ADDR4),Y
STA ]ASIZE+1
INY
LDA (ADDR4),Y
STA ]ESIZE
STA ]ESIZEB
LDY #0
LDA #0
BEQ :ENTLPA
:DOADD
CLC
ADC ]AIDX
TAX
TYA
ADC SCRATCH
TAY
TXA
:LPA
ASL ]AIDX
ROL SCRATCH
:ENTLPA
LSR ]ESIZE
BCS :DOADD
BNE :LPA
STX ]IDX
STY ]IDX+1
CLC
LDA #3
ADC ]IDX
STA ADDR2
LDA ]IDX+1
ADC #0
STA ADDR2+1
CLC
LDA ADDR2
ADC ADDR4
STA ADDR2
LDA ADDR2+1
ADC ADDR4+1
STA ADDR2+1
LDY #0
:LP
LDA (ADDR3),Y
STA (ADDR2),Y
INY
CPY ]ESIZEB
BNE :LP
LDY ADDR2+1
LDX ADDR2
LDA ]ESIZEB
RTS
-148
View File
@@ -1,148 +0,0 @@
]ESIZE EQU VARTAB
]XIDX EQU VARTAB+2
]YIDX EQU VARTAB+4
]MCAND EQU VARTAB+6
]MLIER EQU VARTAB+8
]PBAK EQU VARTAB+10
]XLEN EQU VARTAB+12
]YLEN EQU VARTAB+14
]PROD EQU VARTAB+16
APUT162
PLA
TAX
PLA
TAY
PLA
STA ]YIDX
PLA
STA ]YIDX+1
PLA
STA ]XIDX
PLA
STA ]XIDX+1
PLA
STA ADDR4
PLA
STA ADDR4+1
PLA
STA ADDR3
PLA
STA ADDR3+1
TYA
PHA
TXA
PHA
LDY #4
LDA (ADDR4),Y
STA ]ESIZE
LDY #0
LDA (ADDR4),Y
STA ]XLEN
LDY #1
LDA (ADDR4),Y
STA ]XLEN+1
LDY #2
LDA (ADDR4),Y
STA ]YLEN
LDY #3
LDA (ADDR4),Y
STA ]YLEN+1
LDY #0
LDA ]YIDX
STA ]MLIER
LDA ]YIDX+1
STA ]MLIER+1
LDA ]YLEN
STA ]MCAND
LDA ]YLEN+1
STA ]MCAND+1
LDA #00
STA ]PROD
STA ]PROD+1
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFT_R
LSR ]MLIER+1
ROR ]MLIER
BCC :ROT_R
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROT_R
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFT_R
LDA ]PROD
STA ]PBAK
LDA ]PROD+1
STA ]PBAK+1
LDA ]XIDX
STA ]MLIER
LDA ]XIDX+1
STA ]MLIER+1
LDA ]ESIZE
STA ]MCAND
LDA #0
STA ]MCAND+1
STA ]PROD
STA ]PROD+1
STA ]PROD+2
STA ]PROD+3
LDX #$10
:SHIFTR LSR ]MLIER+1
ROR ]MLIER
BCC :ROTR
LDA ]PROD+2
CLC
ADC ]MCAND
STA ]PROD+2
LDA ]PROD+3
ADC ]MCAND+1
:ROTR
ROR
STA ]PROD+3
ROR ]PROD+2
ROR ]PROD+1
ROR ]PROD
DEX
BNE :SHIFTR
CLC
LDA ]PROD
ADC ]PBAK
STA ]PROD
LDA ]PROD+1
ADC ]PBAK+1
STA ]PROD+1
CLC
LDA ]PROD
ADC #5
STA ]PROD
LDA ]PROD+1
ADC #0
STA ]PROD+1
CLC
LDA ]PROD
ADC ADDR4
STA ADDR2 ; ELEMENT ADDRESS
LDA ]PROD+1
ADC ADDR4+1
STA ADDR2+1
LDY #0
:CLP
LDA (ADDR3),Y
STA (ADDR2),Y
INY
CPY ]ESIZE
BNE :CLP
LDY ADDR2+1
LDX ADDR2
LDA ]ESIZE
RTS
-22
View File
@@ -1,22 +0,0 @@
DPRINT
PLA
TAX
PLA
TAY
PLA
STA ADDR1
PLA
STA ADDR1+1
TYA
PHA
TXA
PHA
LDY #$00
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
RTS
-25
View File
@@ -1,25 +0,0 @@
GPBX
PLA
TAX
PLA
TAY
PLA
STA ADDR1
PLA
STA ADDR1+1
TYA
PHA
TXA
PHA
LDY #$00
LDA (ADDR1),Y
BMI :1
JMP :0
:1
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
:0
LDY #$00 ; BTN NOT PUSHED;A=0
:EXIT
TYA
RTS
-17
View File
@@ -1,17 +0,0 @@
]STRLEN EQU VARTAB
PRNSTR
STA ADDR1
STX ADDR1+1
LDY #0
LDA (ADDR1),Y
STA ]STRLEN
:LP
INY
LDA (ADDR1),Y
JSR COUT1
CPY ]STRLEN
BNE :LP
; LOOP
LDY #0
LDA (ADDR1),Y
RTS
-26
View File
@@ -1,26 +0,0 @@
]STRLEN EQU VARTAB
SINPUT
LDX #$00
JSR GETLN
STX ]STRLEN
CPX #0
BNE :INP_CLR
STX RETLEN
STX RETURN
JMP :EXIT
:INP_CLR
LDA ]STRLEN
STA RETURN
STA RETLEN
INC RETLEN
LDX #255
LDY #0
:LOOP
INX
INY
LDA KEYBUFF,X
STA RETURN,Y
CPX ]STRLEN
BNE :LOOP ; LOOP
:EXIT
RTS
-24
View File
@@ -1,24 +0,0 @@
XPRINT
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #$01
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #$00
PHA
LDA ADDR1
PHA
RTS
@@ -1,75 +0,0 @@
*
*``````````````````````````````*
* -< COMMON DEMO )- *
* *
* VERSION 0.4.0 *
* *
* 28-APR-2019 *
* *
* NATHAN D. RIGGS *
* NATHAN.RIGGS@OUTLOOK.COM *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP ONLY
TR ON
DSK STRUCTURES.DEMO
OBJ $BFE0
ORG $6000
*
*``````````````````````````````*
* TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT MIN.HEAD.REQUIRED
USE MIN.MAC.REQUIRED
USE MIN.HOOKS.COMMON
USE MIN.MAC.COMMON
]HOME EQU $FC58
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
]VAR1 EQU VARTAB
]VAR2 EQU VARTAB+1
]VAR3 EQU VARTAB+2
]VAR4 EQU VARTAB+3
*
JSR ]HOME
*
LDA #10
STA ]VAR1
STA ]VAR3
LDA #20
STA ]VAR2
STA ]VAR4
*
IFJ ]VAR1;=;]VAR2;V1E2
A1 IFJ ]VAR1;=;]VAR3;V1E3
A2 IFJE ]VAR2;=;]VAR3;V2E3;V2E4
*
JMP REENTRY
*
V1E2
_PRN "VAR1 = VAR2."
JMP A1
V1E3 _PRN "VAR1 = VAR3",8D8D
JMP A2
V2E3
_PRN "VAR2 = VAR3.",8D8D
JMP A2
V2E4
_PRN "VAR2 = VAR4",8D8D
JMP REENTRY
*
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** BOTTOM INCLUDES
*
PUT MIN.LIB.REQUIRED
-534
View File
@@ -1,534 +0,0 @@
6000- 4C 37 61 JMP $6137
6003- 00 BRK
6004- 00 BRK
6005- 00 BRK
6006- 00 BRK
6007- 00 BRK
6008- 00 BRK
6009- 00 BRK
600A- 00 BRK
600B- 00 BRK
600C- 00 BRK
600D- 00 BRK
600E- 00 BRK
600F- 00 BRK
6010- 00 BRK
6011- 00 BRK
6012- 00 BRK
6013- 00 BRK
6014- 00 BRK
6015- 00 BRK
6016- 00 BRK
6017- 00 BRK
6018- 00 BRK
6019- 00 BRK
601A- 00 BRK
601B- 00 BRK
601C- 00 BRK
601D- 00 BRK
601E- 00 BRK
601F- 00 BRK
6020- 00 BRK
6021- 00 BRK
6022- 00 BRK
6023- 00 BRK
6024- 00 BRK
6025- 00 BRK
6026- 00 BRK
6027- 00 BRK
6028- 00 BRK
6029- 00 BRK
602A- 00 BRK
602B- 00 BRK
602C- 00 BRK
602D- 00 BRK
602E- 00 BRK
602F- 00 BRK
6030- 00 BRK
6031- 00 BRK
6032- 00 BRK
6033- 00 BRK
6034- 00 BRK
6035- 00 BRK
6036- 00 BRK
6037- 00 BRK
6038- 00 BRK
6039- 00 BRK
603A- 00 BRK
603B- 00 BRK
603C- 00 BRK
603D- 00 BRK
603E- 00 BRK
603F- 00 BRK
6040- 00 BRK
6041- 00 BRK
6042- 00 BRK
6043- 00 BRK
6044- 00 BRK
6045- 00 BRK
6046- 00 BRK
6047- 00 BRK
6048- 00 BRK
6049- 00 BRK
604A- 00 BRK
604B- 00 BRK
604C- 00 BRK
604D- 00 BRK
604E- 00 BRK
604F- 00 BRK
6050- 00 BRK
6051- 00 BRK
6052- 00 BRK
6053- 00 BRK
6054- 00 BRK
6055- 00 BRK
6056- 00 BRK
6057- 00 BRK
6058- 00 BRK
6059- 00 BRK
605A- 00 BRK
605B- 00 BRK
605C- 00 BRK
605D- 00 BRK
605E- 00 BRK
605F- 00 BRK
6060- 00 BRK
6061- 00 BRK
6062- 00 BRK
6063- 00 BRK
6064- 00 BRK
6065- 00 BRK
6066- 00 BRK
6067- 00 BRK
6068- 00 BRK
6069- 00 BRK
606A- 00 BRK
606B- 00 BRK
606C- 00 BRK
606D- 00 BRK
606E- 00 BRK
606F- 00 BRK
6070- 00 BRK
6071- 00 BRK
6072- 00 BRK
6073- 00 BRK
6074- 00 BRK
6075- 00 BRK
6076- 00 BRK
6077- 00 BRK
6078- 00 BRK
6079- 00 BRK
607A- 00 BRK
607B- 00 BRK
607C- 00 BRK
607D- 00 BRK
607E- 00 BRK
607F- 00 BRK
6080- 00 BRK
6081- 00 BRK
6082- 00 BRK
6083- 00 BRK
6084- 00 BRK
6085- 00 BRK
6086- 00 BRK
6087- 00 BRK
6088- 00 BRK
6089- 00 BRK
608A- 00 BRK
608B- 00 BRK
608C- 00 BRK
608D- 00 BRK
608E- 00 BRK
608F- 00 BRK
6090- 00 BRK
6091- 00 BRK
6092- 00 BRK
6093- 00 BRK
6094- 00 BRK
6095- 00 BRK
6096- 00 BRK
6097- 00 BRK
6098- 00 BRK
6099- 00 BRK
609A- 00 BRK
609B- 00 BRK
609C- 00 BRK
609D- 00 BRK
609E- 00 BRK
609F- 00 BRK
60A0- 00 BRK
60A1- 00 BRK
60A2- 00 BRK
60A3- 00 BRK
60A4- 00 BRK
60A5- 00 BRK
60A6- 00 BRK
60A7- 00 BRK
60A8- 00 BRK
60A9- 00 BRK
60AA- 00 BRK
60AB- 00 BRK
60AC- 00 BRK
60AD- 00 BRK
60AE- 00 BRK
60AF- 00 BRK
60B0- 00 BRK
60B1- 00 BRK
60B2- 00 BRK
60B3- 00 BRK
60B4- 00 BRK
60B5- 00 BRK
60B6- 00 BRK
60B7- 00 BRK
60B8- 00 BRK
60B9- 00 BRK
60BA- 00 BRK
60BB- 00 BRK
60BC- 00 BRK
60BD- 00 BRK
60BE- 00 BRK
60BF- 00 BRK
60C0- 00 BRK
60C1- 00 BRK
60C2- 00 BRK
60C3- 00 BRK
60C4- 00 BRK
60C5- 00 BRK
60C6- 00 BRK
60C7- 00 BRK
60C8- 00 BRK
60C9- 00 BRK
60CA- 00 BRK
60CB- 00 BRK
60CC- 00 BRK
60CD- 00 BRK
60CE- 00 BRK
60CF- 00 BRK
60D0- 00 BRK
60D1- 00 BRK
60D2- 00 BRK
60D3- 00 BRK
60D4- 00 BRK
60D5- 00 BRK
60D6- 00 BRK
60D7- 00 BRK
60D8- 00 BRK
60D9- 00 BRK
60DA- 00 BRK
60DB- 00 BRK
60DC- 00 BRK
60DD- 00 BRK
60DE- 00 BRK
60DF- 00 BRK
60E0- 00 BRK
60E1- 00 BRK
60E2- 00 BRK
60E3- 00 BRK
60E4- 00 BRK
60E5- 00 BRK
60E6- 00 BRK
60E7- 00 BRK
60E8- 00 BRK
60E9- 00 BRK
60EA- 00 BRK
60EB- 00 BRK
60EC- 00 BRK
60ED- 00 BRK
60EE- 00 BRK
60EF- 00 BRK
60F0- 00 BRK
60F1- 00 BRK
60F2- 00 BRK
60F3- 00 BRK
60F4- 00 BRK
60F5- 00 BRK
60F6- 00 BRK
60F7- 00 BRK
60F8- 00 BRK
60F9- 00 BRK
60FA- 00 BRK
60FB- 00 BRK
60FC- 00 BRK
60FD- 00 BRK
60FE- 00 BRK
60FF- 00 BRK
6100- 00 BRK
6101- 00 BRK
6102- 00 BRK
6103- 00 BRK
6104- 00 BRK
6105- 00 BRK
6106- 00 BRK
6107- 00 BRK
6108- 00 BRK
6109- 00 BRK
610A- 00 BRK
610B- 00 BRK
610C- 00 BRK
610D- 00 BRK
610E- 00 BRK
610F- 00 BRK
6110- 00 BRK
6111- 00 BRK
6112- 00 BRK
6113- 00 BRK
6114- 00 BRK
6115- 00 BRK
6116- 00 BRK
6117- 00 BRK
6118- 00 BRK
6119- 00 BRK
611A- 00 BRK
611B- 00 BRK
611C- 00 BRK
611D- 00 BRK
611E- 00 BRK
611F- 00 BRK
6120- 00 BRK
6121- 00 BRK
6122- 00 BRK
6123- 00 BRK
6124- 00 BRK
6125- 00 BRK
6126- 00 BRK
6127- 00 BRK
6128- 00 BRK
6129- 00 BRK
612A- 00 BRK
612B- 00 BRK
612C- 00 BRK
612D- 00 BRK
612E- 00 BRK
612F- 00 BRK
6130- 00 BRK
6131- 00 BRK
6132- 00 BRK
6133- 00 BRK
6134- 00 BRK
6135- 00 BRK
6136- 00 BRK
6137- 4C D0 03 JMP $03D0
613A- 00 BRK
613B- 00 BRK
613C- 00 BRK
613D- 00 BRK
613E- 00 BRK
613F- 00 BRK
6140- 00 BRK
6141- 00 BRK
6142- 00 BRK
6143- 00 BRK
6144- B0 B1 BCS $60F7
6146- B2 B3 LDA ($B3)
6148- B4 B5 LDY $B5,X
614A- B6 B7 LDX $B7,Y
614C- B8 CLV
614D- B9 C1 C2 LDA $C2C1,Y
6150- C3 ???
6151- C4 C5 CPY $C5
6153- C6 8C DEC $8C
6155- 3C 61 85 BIT $8561,X
6158- 06 86 ASL $86
615A- 07 ???
615B- A9 8D LDA #$8D
615D- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6160- A5 07 LDA $07
6162- 29 F0 AND #$F0
6164- 4A LSR
6165- 4A LSR
6166- 4A LSR
6167- 4A LSR
6168- AA TAX
6169- BD 44 61 LDA $6144,X
616C- 20 F0 FD JSR $FDF0 F8ROM:COUT1
616F- A5 07 LDA $07
6171- 29 0F AND #$0F
6173- AA TAX
6174- BD 44 61 LDA $6144,X
6177- 20 F0 FD JSR $FDF0 F8ROM:COUT1
617A- A5 06 LDA $06
617C- 29 F0 AND #$F0
617E- 4A LSR
617F- 4A LSR
6180- 4A LSR
6181- 4A LSR
6182- AA TAX
6183- BD 44 61 LDA $6144,X
6186- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6189- A5 06 LDA $06
618B- 29 0F AND #$0F
618D- AA TAX
618E- BD 44 61 LDA $6144,X
6191- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6194- A9 BA LDA #$BA
6196- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6199- A5 A3 LDA $A3
619B- 20 F0 FD JSR $FDF0 F8ROM:COUT1
619E- A0 00 LDY #$00
61A0- B1 06 LDA ($06),Y
61A2- 29 F0 AND #$F0
61A4- 4A LSR
61A5- 4A LSR
61A6- 4A LSR
61A7- 4A LSR
61A8- 8D 3B 61 STA $613B
61AB- B1 06 LDA ($06),Y
61AD- 29 0F AND #$0F
61AF- 8D 3A 61 STA $613A
61B2- AE 3B 61 LDX $613B
61B5- BD 44 61 LDA $6144,X
61B8- 20 F0 FD JSR $FDF0 F8ROM:COUT1
61BB- AE 3A 61 LDX $613A
61BE- BD 44 61 LDA $6144,X
61C1- 20 F0 FD JSR $FDF0 F8ROM:COUT1
61C4- A9 A0 LDA #$A0
61C6- 20 F0 FD JSR $FDF0 F8ROM:COUT1
61C9- C8 INY
61CA- CC 3C 61 CPY $613C
61CD- D0 D1 BNE $61A0
61CF- 60 RTS
61D0- A9 01 LDA #$01
61D2- 8D B6 AA STA $AAB6
61D5- 85 76 STA $76
61D7- 85 33 STA $33
61D9- 85 06 STA $06
61DB- 86 07 STX $07
61DD- A9 FF LDA #$FF
61DF- 85 D8 STA $D8
61E1- A0 00 LDY #$00
61E3- B1 06 LDA ($06),Y
61E5- 8D 5A 9D STA $9D5A
61E8- C8 INY
61E9- B1 06 LDA ($06),Y
61EB- 8D 5B 9D STA $9D5B
61EE- 60 RTS
61EF- 68 PLA
61F0- 85 06 STA $06
61F2- 68 PLA
61F3- 85 07 STA $07
61F5- A0 01 LDY #$01
61F7- B1 06 LDA ($06),Y
61F9- F0 06 BEQ $6201
61FB- 20 F0 FD JSR $FDF0 F8ROM:COUT1
61FE- C8 INY
61FF- D0 F6 BNE $61F7
6201- 18 CLC
6202- 98 TYA
6203- 65 06 ADC $06
6205- 85 06 STA $06
6207- A5 07 LDA $07
6209- 69 00 ADC #$00
620B- 48 PHA
620C- A5 06 LDA $06
620E- 48 PHA
620F- 60 RTS
6210- C0 00 CPY #$00
6212- F0 18 BEQ $622C
6214- EA NOP
6215- C0 01 CPY #$01
6217- D0 03 BNE $621C
6219- 4C 27 62 JMP $6227
621C- 88 DEY
621D- A2 CA LDX #$CA
621F- CA DEX
6220- D0 FD BNE $621F
6222- EA NOP
6223- EA NOP
6224- 88 DEY
6225- D0 F6 BNE $621D
6227- A2 C7 LDX #$C7
6229- CA DEX
622A- D0 FD BNE $6229
622C- 60 RTS
622D- A5 EF LDA $EF
622F- A6 FD LDX $FD
6231- F0 0C BEQ $623F
6233- A0 00 LDY #$00
6235- 91 FA STA ($FA),Y
6237- C8 INY
6238- D0 FB BNE $6235
623A- E6 FB INC $FB
623C- CA DEX
623D- D0 F6 BNE $6235
623F- A6 FC LDX $FC
6241- F0 08 BEQ $624B
6243- A0 00 LDY #$00
6245- 91 FA STA ($FA),Y
6247- C8 INY
6248- CA DEX
6249- D0 FA BNE $6245
624B- 60 RTS
624C- A5 FC LDA $FC
624E- 38 SEC
624F- E5 FA SBC $FA
6251- AA TAX
6252- A5 FD LDA $FD
6254- E5 FB SBC $FB
6256- A8 TAY
6257- 8A TXA
6258- C5 FE CMP $FE
625A- 98 TYA
625B- E5 FF SBC $FF
625D- B0 06 BCS $6265
625F- 20 8E 62 JSR $628E
6262- 4C BD 62 JMP $62BD
6265- 20 6B 62 JSR $626B
6268- 4C BD 62 JMP $62BD
626B- A0 00 LDY #$00
626D- A6 FF LDX $FF
626F- F0 0E BEQ $627F
6271- B1 FA LDA ($FA),Y
6273- 91 FC STA ($FC),Y
6275- C8 INY
6276- D0 F9 BNE $6271
6278- E6 FB INC $FB
627A- E6 FD INC $FD
627C- CA DEX
627D- D0 F2 BNE $6271
627F- A6 FE LDX $FE
6281- F0 08 BEQ $628B
6283- B1 FA LDA ($FA),Y
6285- 91 FC STA ($FC),Y
6287- C8 INY
6288- CA DEX
6289- D0 F8 BNE $6283
628B- 4C BD 62 JMP $62BD
628E- A5 FF LDA $FF
6290- 18 CLC
6291- 65 FB ADC $FB
6293- 85 FB STA $FB
6295- A5 FF LDA $FF
6297- 18 CLC
6298- 65 FD ADC $FD
629A- 85 FD STA $FD
629C- A4 FE LDY $FE
629E- F0 09 BEQ $62A9
62A0- 88 DEY
62A1- B1 FA LDA ($FA),Y
62A3- 91 FC STA ($FC),Y
62A5- C0 00 CPY #$00
62A7- D0 F7 BNE $62A0
62A9- A6 FF LDX $FF
62AB- F0 10 BEQ $62BD
62AD- C6 FB DEC $FB
62AF- C6 FD DEC $FD
62B1- 88 DEY
62B2- B1 FA LDA ($FA),Y
62B4- 91 FC STA ($FC),Y
62B6- C0 00 CPY #$00
62B8- D0 F7 BNE $62B1
62BA- CA DEX
62BB- D0 F0 BNE $62AD
62BD- 60 RTS
62BE- A0 FF LDY #$FF
62C0- C8 INY
62C1- B1 FA LDA ($FA),Y
62C3- AA TAX
62C4- B1 FC LDA ($FC),Y
62C6- 91 FA STA ($FA),Y
62C8- 8A TXA
62C9- 91 FC STA ($FC),Y
62CB- C4 EF CPY $EF
62CD- D0 F1 BNE $62C0
62CF- 60 RTS
62D0- 60 RTS
File diff suppressed because it is too large Load Diff
+676 -8
View File
@@ -2,12 +2,19 @@
*``````````````````````````````*
* DEMO.REQUIRED *
* *
* THIS IS A DEMO OF THE CORE *
* SUBROUTINES THAT THE WHOLE *
* LIBRARY USES TO FUNCTION. *
* MOST OF THESE ARE NOT USED *
* BY THE PROGRAMMER, BUT ARE *
* INTERNAL TO THE WORKINGS OF *
* OTHER SUBROUTINES. *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 11-DEC-2019 *
* DATE: 11-MAR-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
@@ -25,13 +32,676 @@
* TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT MIN.HEAD.REQUIRED
USE MIN.MAC.REQUIRED
PUT MIN.HEAD.REQUIRED.ASM
USE MIN.MAC.REQUIRED.ASM
*
]COUT EQU $FDF0
]HOME EQU $FC58
*
JSR ]HOME
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** SINCE THIS GROUP OF MACROS ARE PRIMARILY USED
*** INTERNALLY FOR THE LIBRARIES, DEMONSTRATIONS OF
*** THEIR USAGE WILL NOT BE GIVEN HERE. HOWEVER, A
*** QUICK LOOK AT ALMOST ANY LIBRARY'S MACRO FILE
*** WILL SHOW QUITE EASILY HOW THESE MACROS ARE USED.
*
* THE _AXLIT MACRO - .AX LITERAL
* THE _AXSTR MACRO - .AX STRING
* THE _ISLIT MACRO - IS LITERAL
* THE _ISSTR MACRO - IS STRING
* THE _MLIT MACRO - MEMORY LITERAL
* THE _MSTR MACRO - MEMORY STRING
*
*``````````````````````````````*
* _PRN, _WAIT AND BEEP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE _PRN, _WAIT AND BEEP MACROS ARE MOSTLY
*** AVAILABLE FOR DEBUGGING PURPOSES, AND ARE NOT
*** MEANT TO BE USED IN ACTUAL USER PROGRAMS
*** BEYOND THAT CAPACITY.
*
* THE _PRN MACRO - PRINT
*
** THE _PRN MACRO SIMPLY PRINTS A LITERAL STRING
** TO THE SCREEN, AND HAS VERY LIMITED USE. WHEN
** OUTPUT IS MORE IMPORTANT THAN AN ERROR MESSAGE
** OR THE LIKE, USE THE MACROS PROVIDED BY THE
** STDIO LIBRARY.
*
** USAGE:
JSR ]HOME
_PRN "THE _PRN MACRO",8D
_PRN "===============",8D8D
** _PRN "THIS IS A TEST.",8D8D
*
_PRN "THIS IS A TEST.",8D8D
*
* THE _WAIT MACRO - WAIT
*
** LIKEWISE, THE _WAIT MACRO IS FOR USES OF
** CONVENIENCE ONLY, AND THE STDIO LIBRARY
** SHOULD BE USED INSTEAD WHENEVER POSSIBLE.
** NONETHELESS, THE _WAIT MACRO SIMPLY WAITS
** FOR A KEYPRESS BEFORE EXECUTION CONTINUES.
*
** USAGE:
** _WAIT
*
_PRN "THE WAIT MACRO",8D
_PRN "==============",8D8D
_WAIT
*
* THE BEEP MACRO - BEEP
*
** UNSURPRISINGLY, THE BEEP MACRO SENDS A STANDARD
** NUMBER OF TICKS TO THE SPEAKER TO PRODUCE A BEEP
** THAT CAN BE A LENGTH BETWEEN 1 AND 255.
*
** USAGE:
** BEEP #255
*
_PRN "BEEEEEEEEEEEEEEP",8D8D
BEEP #255
*
*``````````````````````````````*
* LONG BRANCHING MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** LONG BRANCHING ROUTINES ARE PRETTY SELF-
*** EXPLANATORY TO ANYONE WHO HAS RUN INTO THE
*** PAGE LENGTH PROBLEM WITH BRANCHING INSTRUCTIONS.
*** ESSENTIALLY, THESE MACROS TO THE APPROPRIATE TESTS,
*** THEN JMP TO THE PARAMETER ADDRESS PASSED. NOTE THAT
*** THIS CAN EASILY BREAK CODE THAT IS SUPPOSED TO BE
*** RELOCATABLE.
*
** SINCE ALL OF THE LONG BRANCHING MACROS WORK
** EXACTLY THE SAME, IT IS ONLY NECESSARY TO SHOW
** HOW ONE OF THEM IS USED. WE WILL USE BCCL HERE,
** OR BRANCH CARRY CLEAR LONG.
*
** USAGE:
** CLC
** BCCL ]CONTINUE
** BRK
** ]CONTINUE
** _PRN "THE CARRY IS CLEAR.",8D8D
_WAIT
*
_PRN "THE BCCL MACRO",8D
_PRN "==============",8D8D
CLC
BCCL ]CONTINUE
BRK
]CONTINUE
_PRN "THE CARRY IS CLEAR.",8D8D
_WAIT
*
* THE BCCL MACRO - BRANCH CARRY CLEAR LONG
* THE BCSL MACRO - BRANCH CARRY SET LONG
* THE BEQL MACRO - BRANCH IF EQUAL LONG
* THE BMIL MACRO - BRANCH IF MINUS LONG
* THE BNEL MACRO - BRANCH NOT EQUAL LONG
* THE BPLL MACRO - BRANCH IF PLUS LONG
* THE BVCL MACRO - BRANCH OVERFLOW CLEAR LONG
* THE BVSL MACRO - BRANCH OVERFLOW SET LONG
*
*``````````````````````````````*
* FAKE 65CO2 MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE FAKE 65C02 MACROS ARE APROXIMATIONS
*** OF THE RELEVANT INSTRUCTIONS IN THE 65C02
*** INSTRUCTION SET WHEN YOU ONLY HAVE A 6502
*** TO WORK WITH. OBVIOUSLY, IF A 65C02 PROCESSOR
*** IS READILY AVAILABLE, YOU SHOULD USE THE
*** REAL INSTRUCTION SET.
*
* THE CBRA MACRO - 65C02 BRANCH ALWAYS
*
** THE CBRA MACRO SIMPLY REPLACES THE MACRO WITH
** A JMP INSTRUCTION TO EMULATE THE BRANCH ALWAYS (BRA)
** 65CO2 INSTRUCTION. IT WORKS LIKE YOU'D EXPECT:
*
** USAGE:
*
** CBRA ]CONT
** BRK
**]CONT _PRN "CBRA WORKED AS EXPECTED.",8D8D
** _WAIT
*
_PRN "THE CBRA MACRO",8D
_PRN "==============",8D8D
CBRA ]CONT
BRK
]CONT _PRN "CBRA WORKED AS EXPECTED.",8D8D
_WAIT
*
* THE CPHX MACRO - 65C02 PUSH .X
*
** THE CPHX MACRO EMULATES THE 65C02 INSTRUCTION
** THAT PUSHES .X TO THE STACK.
*
** USAGE:
*
** LDX #$FF
** CPHX
** _PRN "CONTENT PULLED FROM STACK: "
** PLA ; .X IS NOW IN .A
** STA $300
** DUMP #$300;#1
** _PRN " ",8D8D
** _WAIT
*
_PRN "THE CPHX MACRO",8D
_PRN "==============",8D8D
LDX #$FF
CPHX
_PRN "CONTENT PULLED FROM THE STACK: "
PLA
STA $300
DUMP #$300;#1
_PRN " ",8D8D
_WAIT
*
* THE CPHY MACRO - 65C02 PUSH .Y
*
** THE CPHY MACRO WORKS THE SAME WAY AS THE CPHX
** MACRO, EXCEPT PUSHES .Y INSTEAD OF .X. THUS,
** IT WOULD BE REDUNDANT TO SHOW THE EXACT SAME PROCESS--
** TREAT THE MACRO THE SAME WAY.
*
* THE CPLX MACRO - 65C02 PULL .X
*
** THE CPLX MACRO EMULATES THE PLX INSTRUCTION
** FOR THE 65C02. THE VALUE AT THE TOP OF THE STACK
** IS PULLED AND THEN STORED IN .X.
*
** USAGE:
** LDA #$EE
** PHA
** CPLX
** STX $300
** _PRN "VALUE PULLED FROM STACK:"
** DUMP #$300;#1
** _WAIT
** _PRN " ",8D8D
*
_PRN "THE CPLX MACRO",8D
_PRN "==============",8D8D
LDA #$EE
PHA
CPLX
STX $300
_PRN "VALUE PULLED FROM STACK:"
DUMP #$300;#1
_WAIT
_PRN " ",8D8D
*
* THE CPLY MACRO - 65C02 PULL .Y
*
** THE CPLY MACRO, OR 65CO2 PULL .Y MACRO,
** EMULATES THE 65C02 INSTRUCTION PLY. AGAIN,
** THIS WORKS EXACTLY THE SAME AS CPLX, EXCEPT
** THE PULL IS STORED IN .Y INSTEAD OF .X.
** THEREFORE, WE NEED NOT BE REDUNDANT.
*
* THE CTXY MACRO - 65C02 TRANSFER .X TO .Y
*
** THE CTXY MACRO EMULATES THE 65C02 TRANSFER .X TO .Y
** INSTRUCTION, TXY. .A IS USED AS AN INTERMEDIARY, AND
** THEN ITS ORIGINAL VALUE IS RESTORED.
*
** USAGE:
** LDY #0
** LDX #$DD
** CTXY
** STY $300
** _PRN "CONTENT IN .Y:"
** DUMP #$300;#1
** _WAIT
** _PRN " ",8D8D
*
_PRN "THE CTXY MACRO",8D
_PRN "==============",8D8D
LDY #0
LDX #$DD
CTXY
STY $300
_PRN "CONTENT IN .Y:"
DUMP #$300;#1
_WAIT
_PRN " ",8D8D
*
* THE CTYX MACRO - 65C02 TRANSFER .Y TO .X
*
** LIKE MANY SUBROUTINES BEFORE, THE CTYX MACRO OR
** THE TRANSFER .Y TO .X MACRO, WORKS EXACTLY LIKE
** ITS RELATED SUBROUTINE, THE CTXY MACRO, AND THUS
** ITS USAGE SHOULD BE REFERRED TO IN THAT EXAMLPLE.
** THIS MACRO EMULATES THE CYX INSTRUCTION IN 65CO2.
*
*``````````````````````````````*
* MEMORY MANIPULATION MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE MACROS DEDICATED TO MANIPULATING MEMORY
*** ARE USED FOR A VARIETY OF REASONS, BUT IF
*** YOU ARE A SEASONED PROGRAMMER, YOU ALREADY KNOW
*** THAT 99.9% OF THE JOB IS MEMORY MANIPULATION.
*** THESE HERE ENCOMPASS THOSE DEDICATED TO MOVING,
*** COPYING, AND FILLING MEMORY BLOCKS, AS WELL AS
*** VIEWING MEMORY CONTENTS FOR DEBUGGING PURPOSES.
*** FOR FUN, A POKE AND PEEK MACRO ARE INCLUDED FOR
*** THE APPLESOFT KIDS, AND LOADS OR PULLS THE VALUE INTO .A.
*
* THE DUMP MACRO - MEMORY DUMP
*
** THE DUMP MACRO HAS ACTUALLY ALREADY BEEN
** USED TO SHOW THE CONTENTS RETURNED BY SOME
** OF THE 65C02 EMULATION MACROS. THE MACRO
** SIMPLY DUMPS A BLOCK OF MEMORY SPECIFIED BY
** THE PARAMETERS PASSED. THEREFORE:
*
** USAGE:
*
** LDA #$BB
** STA $300
** LDA #$AA
** STA $301
** _PRN "VALUES IN $301-$302:"
** DUMP #$300;#2
** _WAIT
** _PRN " ",8D8D
*
_PRN "THE DUMP MACRO",8D
_PRN "==============",8D8D
LDA #$BB
STA $300
LDA #$AA
STA $301
_PRN "VALUES IN $301-$302:"
DUMP #$300;#2
_WAIT
_PRN " ",8D8D
*
* THE ERRH MACRO - ERROR HANDLER
*
** THE ERRH MACRO SETS THE ERROR HANDLING
** HOOK FOR SOUBROUTINES THAT RELY ON
** APPLESOFT IN SOME WAY. THIS IS PARTICULARLY
** USED TO DETECT AN END-OF-FILE WHEN
** READING A TEXT FILE, AS THERE IS NO "STANDARD"
** WAY TO DETECT THE EOF EXCEPT BY THE ERROR RETURN.
*
** USAGE:
** ERRH #$6000
*
** SINCE THIS ROUTINE REQUIRES TOO MUCH INTEGRATION
** WITH OTHER LIBRARIES, YOU WON'T BE SEEING A
** DEMO HERE. HOWEVER, THE CURRENT ITERATION OF THE
** FILEIO LIBRARY MAKES EXTENSIVE USE OF THE MACRO,
** AND CAN BE REFERRED TO FOR PLENTLY OF EXAMPLES.
*
* THE GRET MACRO - GET RETURN
*
** THE GRET MACRO STANDS FOR "GET RETURN," AND
** SIMPLY COPIES THE CONTENTS OF THE RETURN
** MEMORY BLOCK TO ANOTHER MEMORY BLOCK. THE
** LENGTH OF THIS BLOCK IS DETERMINED BY THE
** RETLEN VARIABLE, WHICH LOGICALLY PRECEDES THE
** RETURN BLOCK AS A BYTE. AS SUCH, NOTE THAT
** RETURN CAN ONLY HOLD UP TO 255 BYTES, AND
** THUS THIS IS THE MAXIMUM TO BE TRANSFERRED.
*
** USAGE:
*
** LDA #$11
** STA RETURN
** LDA #$12
** STA RETURN+1
** LDA #$13
** STA RETURN+2
** LDA #3
** STA RETLEN
** GRET #$300
** _PRN "THE 3 BYTES PUT IN RETURN ARE NOW AT $300:"
** DUMP #$300;#3
** _WAIT
** _"PRN " ",8D8D
_PRN "THE GRET MACRO",8D
_PRN "==============",8D8D
LDA #$11
STA RETURN
LDA #$12
STA RETURN+1
LDA #$13
STA RETURN+2
LDA #3
STA RETLEN
GRET #$300
_PRN "THE 4 BYTES PUT IN RETURN ARE NOW AT $300"
DUMP #$300;#3
_WAIT
_PRN " ",8D8D
*
* THE MFILL MACRO - MEMORY FILL
*
** THE MFILL MACRO FILLS A BLOCK OF MEMORY
** FROM A GIVEN STARTING ADDRESS AND A LENGTH
** IN BYTES WITH THE SPECIFIED FILL VALUE.
** NOTE THAT OVERFLOW ISSUES ARE TAKEN INTO
** CONSIDERATION, AND THAT DETERMINES HOW THE
** MEMORY LOCATIONS ARE READ AND FILLED (BACKWARDS
** OR FORWARDS).
*
** USAGE:
*
** MFILL #$300;#$08;#$FF
** _PRN "$300-$308 = "
** DUMP #$300;#$08
** _WAIT
** _PRN " ",8D8D
*
_PRN "THE MFILL MACRO",8D
_PRN "===============",8D8D
MFILL #$300;#$08;#$FF
_PRN "$300-$308 =",8D8D
DUMP #$300;#$08
_WAIT
_PRN " ",8D8D
*
* THE MOVB MACRO - MOVE MEMORY BLOCKS
*
** THE MOVB MACRO, WHICH STANDS FOR MOVE
** BLOCK, DOES EXACTLY WHAT IT SAYS: IT MOVES
** A BLOCK OF MEMORY TO ANOTHER BLOCK OF
** MEMORY, THOUGH THIS SHUOLD BE SEEN MORE AS
** A COPY, SINCE THE ORIGINAL DATA IS STILL
** IN PLACE AFTER CALLING THE MACRO. NOTE THAT
** NO CHECKS FOR OVERLAP ARE MADE, SO ERROR
** CONTROL IS IN THAT RESPECT IS LEFT UP TO
** THE END PROGRAMMER.
*
** USAGE:
*
** LDA #$AA
** STA $300
** LDA #$BB
** STA $301
** LDA #$CC
** STA $302
** MOVB #$300;#$310;#3
** _PRN "$310-$312 NOW = $300-$302"
** DUMP #$310;#3
** _WAIT
** _PRN " ",8D8D
*
_PRN "THE MOVB MACRO",8D
_PRN "==============",8D8D
LDA #$AA
STA $300
LDA #$BB
STA $301
LDA #$CC
STA $302
MOVB #$300;#$310;#3
_PRN "$310-$312 NOW = $300-$302"
DUMP #$310;#3
_WAIT
_PRN " ",8D8D
*
* THE MSWAP MACRO - SWAP MEMORY BLOCKS
*
** THE MSWAP MACRO SWAPS THE VALUES HELD IN TWO
** BLOCKS OF MEMORY. NOTE THAT NO OVERFLOW CHECKING
** IS DONE, SO THE END PROGRAMMER HAS TO BE CAREFUL
** WHEN USING THE MACRO.
*
** USAGE:
*
** LDA #$66
** STA $300
** LDA #$77
** STA $301
** LDA #$88
** STA $302
** MSWAP #$300;#$310;#4
** DUMP #$300;#3
** DUMP #$310;#3
** _PRN " ",8D8D
** _PRN "$300-$302 HAS BEEN SWAPPED WITH $310-$312",8D8D
** _WAIT
*
_PRN "THE MSWAP MACRO",8D
_PRN "===============",8D8D
LDA #$66
STA $300
LDA #$77
STA $301
LDA #$88
STA $302
MSWAP #$300;#$310;#4
DUMP #$300;#3
DUMP #$310;#3
_PRN " ",8D8D
_PRN "$300-$302 WAS SWAPPED WITH $310-312.",8D8D
_WAIT
*
* THE PEEK MACRO - PEEK MEMORY
*
** THE PEEK MACRO EMULATES THE PEEK INSTRUCTION
** IN APPLESOFT, KINDA. MOSTLY, IT JUST LOADS
** A VELUE FROM MEMORY INTO .A. HOWEVER, MORE
** FUNCTIONALITY MAY BE ADDED TO THIS MACRO IN
** THE FUTURE IN ORDER TO DIFFERENTIATE IT FROM
** SIMPLY LDA ##.
*
** USAGE:
*
** LDA #$EE
** STA $300
** PEEK #$300
** STA RETURN
** _PRN ".A NOW HOLDS:",8D8D
** DUMP #RETURN;#1
** _PRN " ",8D8D
** _WAIT
*
_PRN "THE PEEK MACRO",8D
_PRN "==============",8D8D
LDA #$EE
STA $300
PEEK #$300
STA RETURN
_PRN ".A NOW HOLDS:",8D8D
DUMP #RETURN;#1
_PRN " ",8D8D
_WAIT
*
* THE POKE MACRO - POKE MEMORY
*
** LIKE THE PEEK MACRO, THE POKE MACRO SIMPLY
** BEHAVES LIKE THE APPLESOFT EQUIVALENT, PUTTING
** THE FIRST PARAMETER VALUE INTO THE SECOND PARAMETER'S
** ADDRESSS. LIKE WITH PEEK, MORE MAY BE ADDED TO THE
** MACRO'S FUNCTIONALITY IN THE FUTURE.
*
** USAGE:
*
** POKE #$99;#$300
** _PRN "$300 CONTAINS:"
** DUMP #$300;#1
** _PRN " ",8D8D
** _WAIT
*
_PRN "THE POKE MACRO",8D
_PRN "==============",8D8D
POKE #$99;#$300
_PRN "$300 CONTAINS:"
DUMP #$300;#1
_PRN " ",8D8D
_WAIT
*
*``````````````````````````````*
* THE WEIRDOS: CLRHI,DELAY AND *
* GBIT MACROS. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THESE MACROS CAN BE HIGHLY USEFUL,
*** BUT SO FAR DO NOT FIT WELL WITH ANY
*** OTHER GROUPING OF MACROS.
*
* THE CLRHI MACRO - CLEAR HIGH NIBBLE
*
** THE CLRHI MACRO CLEARS THE HIGH NIBBLE IN .A
** BYTE TO %0000. THIS HAS VARIOUS USES THAT NEED
** NOT BE GONE OVER HERE.
*
** USAGE:
*
** LDA #$FF
** CLRHI
** STA $300
** DUMP #$300;#1
** _PRN "^^ THE HIGH NIBBLE WAS CLEARED"
** _PRN " ",8D8D
** _WAIT
*
_PRN "THE CLRHI MACRO",8D
_PRN "===============",8D8D
LDA #$FF
CLRHI
STA $300
DUMP #$300;#1
_PRN "^^ THE HIGH NIBBLE WAS CLEARED"
_PRN " ",8D8D
_WAIT
*
* THE DELAY MACRO - DELAY
*
** THE DELAY MACRO SIMPLY DELAYS RXECUTION
** FOR A NUMBER OF MILLISECONDS. THIS ACCEPTS
** A BYTE VALUE, SO IF YOU WANT A SINGLE SECOND
** OF DELAY, YOU NEED TO RUN THE MACRO FOR TIMES
** AS SUCH:
*
** USAGE:
*
** DELAY #250
** DELAY #250
** DELAY #250
** DELAY #250
** _PRN "DONE!",8D8D
** _WAIT
*
_PRN "THE DELAY MACRO",8D
_PRN "===============",8D8D
DELAY #250
DELAY #250
DELAY #250
DELAY #250
_PRN "DONE!",8D8D
_WAIT
*
* THE GBIT MACRO - GET BIT VALUE
*
** THE GBIT MACRO RETURNS THE BIT VALUE
** OF THE GIVEN POSITION IN THE PARAMETER.
*
** USAGE:
*
** GBIT #0;#%00100101
** STA $300
** DUMP #$300;#1
** _WAIT
*
_PRN "THE GBIT MACRO",8D
_PRN "==============",8D8D
GBIT #0;%00100101
STA $300
DUMP #$300;#1
_WAIT
*
JSR ]HOME
*
*``````````````````````````````*
* 8080 ALIAS MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE 8080 ALIAS MACROS ARE APPROXIMATIONS
*** OF SOME OF THE INSTRUCTIONS IN THE 8080
*** INSTRUCTION SET, FOR USE BY THOSE WHO ARE
*** USED TO PROGRAMMING IN 8080 ASSEMBLY. NOTE
*** AGAIN THE WORD **APPROXIMATION**, AS I AM
*** NOT AN 8080 PROGRAMMER.
*
*** ALSO NOTE THAT YOU CAN ONLY USE ONE SET OF
*** ALIAS FILES AT A TIME; OTHERWISE, MACROS
*** WITH THE SAME NAME IN EACH ALIAS FILE WILL
*** CAUSE AN ASSEMBLY ERROR. THIS IS MOST NOTABLE
*** WITH INSTRUCTIONS LIKE 'RET' OR 'CALL."
*
*** SINCE ALL OF THESE MACROS ARE FAIRLY SIMPLE,
*** EXAMPLES ARE NOT GIVEN HERE. A FEW MACROS MAY
*** NEED EXAMPLES IN THE FUTURE, BUT THESE MOSTLY
*** WORK THE WAY YOU MIGHT EXPECT.
*
*
* CALL - MIMICS JSR INSTRUCTION
* RET - MIMICS RTS INSTRUCTION
* JA - JMP IF .A > CMP RESULT
* JAE - JMP IF .A => CMP RESULT
* JB - JMP IF .A < CMP RESULT
* JBE - JMP IF .A =< CMP RESULT
* JC - JMP IF C = 1
* JE - JMP IF BEQ
* JG - JMP IF .A > CMP RESULT
* JGE - JMP IF .A >= CMP RESULT
* JL - JMP IF .A < CMP RESULT
* JLE - JMP IF .A <= CMP RESULT
* JNC - JMP IF C = 0
* JZ - JMP IF Z = 0
* JNZ - JMP IF Z = 1
* JS - JMP IF SIGNED
* JNS - JMP IF NOT SIGNED
* JO - JMP IF V = 1
* JNO - JMP IF V = 0
* ANC - ADD NO CARRY
* SNC - SUBTRACT NO CARRY
* PUSHA - PUSH ALL REGISTERS
* PULLA - PULL ALL REGISTERS
* POPA - PULL ALL REGISTERS
*
*``````````````````````````````*
* Z80 ALIAS MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THESE MACROS ARE APPROXIMATIONS OF
*** SOME INSTRUCTIONS IN THE Z80 SET, AND
*** ARE MEANT TO AID THE PROGRAMMER WHO IS
*** USED TO A Z80 CPU. CURRENTLY, ALL OF THESE
*** EXAMPLES ARE COMMENTED OUT DUE TO THE FACT
*** THAT SOME OF THE MACRO NAMES CONFLICT WITH
*** THE 8080 ALIAS SET. TO SEE THESE IN ACTION,
*** YOU MUST FIRST COMMENT OUT THE 8080 EXAMPLES
*** AND THEN COMMENT OUT THE 8080 ALIAS FILE
*** INCLUDE AT THE END, WHILE ALSO UNCOMMENTING
*** THE Z80 ALIAS FILE INCLUSION.
*
* CALL - JSR EQUIVALENT
* CPL - INVERTS BITS IN .A
* JP - JMP EQUIVALENT
* LD - MOV VALUE FROM SRC TO DEST
* POP - PULL FROM STACK
* RET - RTS EQUIVALENT
* SCF - C = 1
*
JMP REENTRY
*
@@ -41,9 +711,7 @@
*
** BOTTOM INCLUDES
*
PUT MIN.LIB.REQUIRED
*
** INDIVIDUAL SUBROUTINE INCLUDES
*
* MEMORY LIBRARY SUBROUTINES
PUT MIN.LIB.REQUIRED.ASM
USE MIN.MAC.ALIAS.8080.ASM
*USE MIN.MAC.ALIAS.Z80.ASM
*
+1 -1
View File
@@ -11,7 +11,7 @@
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 29-NOV-2019 *
* DATE: 11-MAR-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* *
+218 -216
View File
@@ -10,7 +10,7 @@
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 28-NOV-2019 *
* DATE: 11-MAR-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* LICENSE: APACHE 2.0 *
* OS: DOS 3.3 *
@@ -19,9 +19,11 @@
* *
* __DUMP : DUMP MEMORY *
* __ERRH : HANDLE ERRORS *
* __GETRET : GET RETURN VAL *
* __P : PRINT *
* DELAYMS : DELAY MLSECS *
* MEMFILL : FILL MEM BLOCK *
* MEMMOVE : MOVE MEM BLOCK *
* MEMSWAP : SWAP MEM BLOCKS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** LIBRARY-SPECIFIC VARIABLES
@@ -44,7 +46,6 @@
]KYBD EQU $C000 ; KEYBOARD INPUT
]STROBE EQU $C010 ; KEYBOARD STROBE
*
*
*``````````````````````````````*
* __DUMP: (NATHAN RIGGS) *
* *
@@ -62,62 +63,62 @@
* OF BYTES. *
* *
* DESTROYS: NZCIDV *
* ^^^ *
* ^^^ ^ *
* *
* CYCLES: 787+ *
* SIZE: 111 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
__DUMP
STY ]LENGTH ; ++<4C3B> LENGTH PASSED IN .Y
STA ADDR1 ; ++<3C2B> ADDRESS LOBYTE IN .A
STX ADDR1+1 ; ++<3C2B> ADDRESS HIBYTE IN .X
LDA #$8D ; ++<2C2B> LOAD CARRIAGE RETURN
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDA ADDR1+1 ; ++<2C2B> GET ADDRESS HIBYTE
CLRHI ; ++<6C3B[16C]> CLEAR HIBITS
TAX ; ++<2C1B> TRANSFER TO .X
LDA ]HEXTAB,X ; ++<5C3B> LOAD HEX CHAR FROM TABLE AT .X
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDA ADDR1+1 ; ++<2C2B> LOAD ADDRESS HIBYTE AGAIN
AND #$0F ; ++<2C2B> CLEAR LOBITS
TAX ; ++<2C1B> TRANSER TO .X
LDA ]HEXTAB,X ; ++<5C3B> LOAD HEX CHAR FROM TABLE AT .X
JSR ]COUT ; ++<6C3B[83C]> SENT TO COUT
LDA ADDR1 ; ++<4C3B> LOAD LOBYTE
CLRHI ; ++<[16C10B]> CLEAR HIBITS
TAX ; ++<2C1B> TRANSFER TO .X
LDA ]HEXTAB,X ; ++<5C3B> LOAD HEXCHAR AT .X
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDA ADDR1 ; ++<3C2B> LOAD LOBYTE AGAIN
AND #$0F ; ++<2C2B> CLEAR LOBITS
TAX ; ++<2C1B> TRANSFER T .X
LDA ]HEXTAB,X ; ++<[16C]> LOAD HEXCHAR AT .X
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDA #":" ; ++<2C2B>
JSR ]COUT ; ++<6C3B[83C]>SEND COLON TO COUT
LDA "#" ; ++<2C2B>
JSR ]COUT ; ++<6C3B[83C]> SEND SPACE TO COUT
LDY #0 ; ++<2C2B> RESET COUNTER
STY ]LENGTH ; {4C3B} LENGTH PASSED IN .Y
STA ADDR1 ; {3C2B} ADDRESS LOBYTE IN .A
STX ADDR1+1 ; {3C2B} ADDRESS HIBYTE IN .X
LDA #$8D ; {2C2B} LOAD CARRIAGE RETURN {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
LDA ADDR1+1 ; {2C2B} GET ADDRESS HIBYTE {NZ}
CLRHI ; {22C13B} CLEAR HIBITS {ZCV,N=0}
TAX ; {2C1B} TRANSFER TO .X {NZ}
LDA ]HEXTAB,X ; {5C3B} LOAD HEX CHAR FROM TABLE AT .X {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
LDA ADDR1+1 ; {2C2B} LOAD ADDRESS HIBYTE AGAIN {NZ}
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
TAX ; {2C1B} TRANSER TO .X {NZ}
LDA ]HEXTAB,X ; {5C3B} LOAD CHAR FROM TABLE AT .X {NZ}
JSR ]COUT ; {89C3B} SENT TO COUT {NZCV}
LDA ADDR1 ; {4C3B} LOAD LOBYTE {NZ}
CLRHI ; {22C13B} CLEAR HIBITS {ZCV,N=0}
TAX ; {2C1B} TRANSFER TO .X {NZ}
LDA ]HEXTAB,X ; {5C3B} LOAD HEXCHAR AT .X {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
LDA ADDR1 ; {3C2B} LOAD LOBYTE AGAIN {NZ}
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
TAX ; {2C1B} TRANSFER T .X {NZ}
LDA ]HEXTAB,X ; {5C3B} LOAD HEXCHAR AT .X {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
LDA #":" ; {2C2B} {NZ}
JSR ]COUT ; {89C3B} SEND COLON TO COUT {NZCV}
LDA "#" ; {2C2B} {NZ}
JSR ]COUT ; {89C3B} SEND SPACE TO COUT {NZCV}
LDY #0 ; {2C2B} RESET COUNTER {NZ}
:LP
LDA (ADDR1),Y ; ++<6C2B> LOAD BYTE FROM ADDRESS
CLRHI ; ++<[16C10B] AT COUNTER OFFSET; CLEAR HIBITS
STA ]LEFT ; ++<4C3B> SAVE LEFT INDEX
LDA (ADDR1),Y ; ++<6C2B> RELOAD
AND #$0F ; ++<2C2B> CLEAR LOBITS
STA ]RIGHT ; ++<4C3B> SAVE RIGHT INDEX
LDX ]LEFT ; ++<4C3B> LOAD LEFT INDEX
LDA ]HEXTAB,X ; ++<5C3B> GET NIBBLE CHAR
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDX ]RIGHT ; ++<4C3B> LOAD RIGHT INDEX
LDA ]HEXTAB,X ; ++<5C3B> GET NIBBLE CHAR
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
LDA #160 ; ++<4C3B> LOAD SPACE
JSR ]COUT ; ++<6C3B[83C]> SEND TO COUT
INY ; ++<2C1B> INCREASE COUNTER
CPY ]LENGTH ; ++<4C3B> IF COUNTER < LENGTH
BNE :LP ; ++<4C2B> CONTINUE LOOP
RTS ; ++<6C1B> ELSE, EXIT
LDA (ADDR1),Y ; {6C2B} LOAD BYTE FROM ADDRESS {NZ}
CLRHI ; {22C13B} AT COUNTER OFFSET; CLEAR HIBITS
STA ]LEFT ; {4C3B} SAVE LEFT INDEX
LDA (ADDR1),Y ; {6C2B} RELOAD {NZ}
AND #$0F ; {2C2B} CLEAR LOBITS {NZ}
STA ]RIGHT ; {4C3B} SAVE RIGHT INDEX
LDX ]LEFT ; {4C3B} LOAD LEFT INDEX {NZ}
LDA ]HEXTAB,X ; {5C3B} GET NIBBLE CHAR {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NCZV}
LDX ]RIGHT ; {4C3B} LOAD RIGHT INDEX {NZ}
LDA ]HEXTAB,X ; {5C3B} GET NIBBLE CHAR {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
LDA #160 ; {4C3B} LOAD SPACE {NZ}
JSR ]COUT ; {89C3B} SEND TO COUT {NZCV}
INY ; {2C1B} INCREASE COUNTER {NZ}
CPY ]LENGTH ; {4C3B} IF COUNTER < LENGTH {NZC}
BNE :LP ; {4C2B} CONTINUE LOOP
RTS ; {6C1B} ELSE, EXIT
*
*``````````````````````````````*
* __ERRH (NATHAN RIGGS) *
@@ -134,28 +135,28 @@ __DUMP
* ROUTINE. *
* *
* DESTROYS: NZCIDV *
* ^^^ *
* ^^ *
* *
* CYCLES: 53 *
* SIZE: 32 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
__ERRH
LDA #1 ; ++<2C2B> TRICK DOS INTO THINKING
STA $AAB6 ; ++<4C3B> IT'S IN APPLESOFT MODE
STA $75+1 ; ++<3C2B> APPLESOFT LINE NUMBER POINTER
STA $33 ; ++<3C2B> APPLESOFT PROMPT CHARACTER
STA ADDR1 ; ++<3C2B> ADDRESS LOBYTE IN .A
STX ADDR1+1 ; ++<3C2B> ADDRESS HIBYTE IN .X
LDA #$FF ; ++<2C2B> TURN ON ERROR HANDLING
STA $D8 ; ++<3C3B> BYTE HERE
LDY #0 ; ++<2C2B> CLEAR OFFSET
LDA (ADDR1),Y ; ++<6C2B> LOAD ADDRESS LOBYTE
STA $9D5A ; ++<4C3B> SET AS ERROR HANDLING LO
INY ; ++<2C1B> INCREASE OFFSET
LDA (ADDR1),Y ; ++<6C2B> LOAD ADDRESS HIBYTE
STA $9D5B ; ++<4C3B> SET AS ERROR HANDLING HI
RTS ; ++<6C1B> EXIT SUBROUTINE
LDA #1 ; {2C2B} TRICK DOS INTO THINKING {NZ}
STA $AAB6 ; {4C3B} IT'S IN APPLESOFT MODE
STA $75+1 ; {3C2B} APPLESOFT LINE NUMBER POINTER
STA $33 ; {3C2B} APPLESOFT PROMPT CHARACTER
STA ADDR1 ; {3C2B} ADDRESS LOBYTE IN .A
STX ADDR1+1 ; {3C2B} ADDRESS HIBYTE IN .X
LDA #$FF ; {2C2B} TURN ON ERROR HANDLING {NZ}
STA $D8 ; {3C3B} BYTE HERE
LDY #0 ; {2C2B} CLEAR OFFSET {NZ}
LDA (ADDR1),Y ; {6C2B} LOAD ADDRESS LOBYTE {NZ}
STA $9D5A ; {4C3B} SET AS ERROR HANDLING LO
INY ; {2C1B} INCREASE OFFSET {NZ}
LDA (ADDR1),Y ; {6C2B} LOAD ADDRESS HIBYTE {NZ}
STA $9D5B ; {4C3B} SET AS ERROR HANDLING HI
RTS ; {6C1B} EXIT SUBROUTINE
*
*``````````````````````````````*
* __P: (NATHAN RIGGS) *
@@ -177,26 +178,26 @@ __ERRH
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
__P
PLA ; ++<4C1B> PULL RETURN LOBYTE
STA ADDR1 ; ++<3C2B> STORE TO ZERO PAGE
PLA ; ++<4C1B> PULL RETURN HIBYTE
STA ADDR1+1 ; ++<3C2B> STORE TO ZERO PAGE --3C,2B
LDY #1 ; ++<2C2B> SET OFFSET TO PLUS ONE
:LP LDA (ADDR1),Y ; ++<6C2B> LOAD BYTE AT OFFSET .Y
BEQ :DONE ; ++<4C2B> IF BYTE = 0, QUIT
JSR ]COUT ; ++<6C3B[83C]> OTHERWISE, PRINT BYTE
INY ; ++<2C1B> INCREASE OFFSET
BNE :LP ; ++<4C2B> IF .Y <> 0, CONTINUE LOOP
:DONE CLC ; ++<2C1B> CLEAR CARRY FLAG
TYA ; ++<2C1B> TRANSFER OFFSET TO .A
ADC ADDR1 ; ++<3C2B> ADD OFFSET TO RETURN ADDRESS
STA ADDR1 ; ++<4C2B> STORE TO RETURN ADDRESS LOBYTE
LDA ADDR1+1 ; ++<4C2B> DO THE SAME WITH THE HIBYTE
ADC #0 ; ++<3C2B> CARRY NOT RESET, SO INC HIBYTE
PHA ; ++<3C1B> IF NEEDED; THEN, PUSH HIBYTE
LDA ADDR1 ; ++<4C2B> LOAD LOBYTE
PHA ; ++<3C1B> PUSH LOBYTE
RTS ; ++<6C1B> EXIT
PLA ; {4C1B} PULL RETURN LOBYTE {NZ}
STA ADDR1 ; {3C2B} STORE TO ZERO PAGE
PLA ; {4C1B} PULL RETURN HIBYTE {NZ}
STA ADDR1+1 ; {3C2B} STORE TO ZERO PAGE
LDY #1 ; {2C2B} SET OFFSET TO PLUS ONE
:LP LDA (ADDR1),Y ; {6C2B} LOAD BYTE AT OFFSET .Y
BEQ :DONE ; {4C2B} IF BYTE = 0, QUIT
JSR ]COUT ; {89C3B} OTHERWISE, PRINT BYTE {NZCV}
INY ; {2C1B} INCREASE OFFSET {NZ}
BNE :LP ; {4C2B} IF .Y <> 0, CONTINUE LOOP
:DONE CLC ; {2C1B} CLEAR CARRY FLAG {C=0}
TYA ; {2C1B} TRANSFER OFFSET TO .A {NZ}
ADC ADDR1 ; {3C2B} ADD OFFSET TO RETURN ADDR {NZCV}
STA ADDR1 ; {4C2B} STORE TO RETURN ADDRESS LOBYTE
LDA ADDR1+1 ; {4C2B} DO THE SAME WITH THE HIBYTE {NZ}
ADC #0 ; {3C2B} CARRY NOT RESET, SO INC HIBYTE {NZCV}
PHA ; {3C1B} IF NEEDED; THEN, PUSH HIBYTE
LDA ADDR1 ; {4C2B} LOAD LOBYTE {NZ}
PHA ; {3C1B} PUSH LOBYTE
RTS ; {6C1B} EXIT
*
*``````````````````````````````*
* DELAYMS (LEVENTHAL/SEVILLE) *
@@ -207,17 +208,17 @@ __P
* *
* INPUT: *
* *
* .Y = NUMBER OF MILLISECS *
* .Y = NUMBER OF MILLISECS *
* *
* OUTPUT: *
* *
* DELAYS FOR X NUMBER OF *
* MILLISECONDS BY LOOPING *
* THROUGH A PRECISE NUMBER *
* OF CYCLES. *
* DELAYS FOR X NUMBER OF *
* MILLISECONDS BY LOOPING *
* THROUGH A PRECISE NUMBER *
* OF CYCLES. *
* *
* DESTROYS: AXYNVBDIZCMS *
* ^^^^ ^^^ *
* DESTROYS: NZCDIV *
* ^^^ ^ *
* *
* CYCLES: 39+ *
* SIZE: 29 BYTES *
@@ -229,31 +230,31 @@ DELAYMS
; SPECIFIC TO 1.23 MHZ
; SPEED OF APPLE II
:DELAY
CPY #0 ; ++<2C2B> IF Y = 0, THEN EXIT
BEQ :EXIT ; ++<2C|3C2B>
NOP ; ++<2C1B> (MAKE OVERHEAD=25C)
CPY #0 ; {2C2B} IF Y = 0, THEN EXIT {NZC}
BEQ :EXIT ; {2C|3C2B}
NOP ; {2C1B} (MAKE OVERHEAD=25C)
*
** IF DELAY IS 1MS THEN GOTO LAST1
** THIS LOGIC IS DESIGNED TO BE
** 5 CYCLES THROUGH EITHER ATH
*
CPY #1 ; ++<2C2B> USE 2 CYCLES
BNE :DELAYA ; ++<2C|3C2B> 3C IF TAKEN, ELSE 2C
JMP :LAST1 ; ++<3C3B>
CPY #1 ; {2C2B} USE 2 CYCLES {NZC}
BNE :DELAYA ; {2C|3C2B} 3C IF TAKEN, ELSE 2C
JMP :LAST1 ; {3C3B}
*
** DELAY 1 MILLISENCOND TIMES (Y-1)
*
:DELAYA
DEY ; ++<2C1B> (PREDEC Y)
DEY ; {2C1B} (PREDEC Y) {NZ}
:DELAY0
LDX #]MSCNT ; ++<2C2B>
LDX #]MSCNT ; {2C2B} {NZ}
:DELAY1
DEX ; ++<2C1B>
BNE :DELAY1 ; ++<3C2B>
NOP ; ++<2C1B>
NOP ; ++<2C1B>
DEY ; ++<2C1B>
BNE :DELAY0 ; ++<3C2B>
DEX ; {2C1B} {NZ}
BNE :DELAY1 ; {3C2B}
NOP ; {2C1B}
NOP ; {2C1B}
DEY ; {2C1B} {NZ}
BNE :DELAY0 ; {3C2B}
:LAST1
*
** DELAY THE LAST TIME 25 CYCLES
@@ -261,21 +262,21 @@ DELAYMS
** AND ROUTINE OVERHEAD INTO
** ACCOUNT.
*
LDX #]MSCNT-3 ; ++<2C2B>
LDX #]MSCNT-3 ; {2C2B} {NZ}
:DELAY2
DEX ; ++<2C1B>
BNE :DELAY2 ; ++<3C2B>
DEX ; {2C1B} {NZ}
BNE :DELAY2 ; {3C2B}
:EXIT
RTS ; ++<6C1B>
RTS ; {6C1B}
*
*``````````````````````````````*
* MEMFILL (LEVENTHAL/SAVILLE) *
* *
* ADAPTED FROM LEVANTHAL AND *
* SAVILLE'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. FILLS A *
* SPECIFIED RANGE OF MEMORY *
* WITH A FILL VALUE. *
* ADAPTED FROM LEVANTHAL AND *
* SAVILLE'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. FILLS A *
* SPECIFIED RANGE OF MEMORY *
* WITH A FILL VALUE. *
* *
* INPUT: *
* *
@@ -298,40 +299,41 @@ MEMFILL
*
** FILL WHOLE PAGES FIRST
*
LDA ]FILL ; ++<3C2B> GET VAL FOR FILL
LDX ]SIZE+1 ; ++<3C2B> X=# OF PAGES TO DO
BEQ :PARTPG ; ++<3C2B> BRANCH IF HIGHBYTE OF SZ = 0
LDY #0 ; ++<2C2B> RESET INDEX
LDA ]FILL ; {3C2B} GET VAL FOR FILL {NZ}
LDX ]SIZE+1 ; {3C2B} X=# OF PAGES TO DO {NZ}
BEQ :PARTPG ; {3C2B} BRANCH IF HIGHBYTE OF SZ = 0
LDY #0 ; {2C2B} RESET INDEX {NZ}
:FULLPG
STA (]ADDR),Y ; ++<6C2B> FILL CURRENT BYTE
INY ; ++<2C1B> INCREMENT INDEX
BNE :FULLPG ; ++<3C2B> BRANCH IF NOT DONE W/ PAGE
INC ]ADDR+1 ; ++<5C2B> ADVANCE TO NEXT PAGE
DEX ; ++<2C1B> DECREMENT COUNTER
BNE :FULLPG ; ++<3C2B> BRANCH IF NOT DONE W/ PAGES
STA (]ADDR),Y ; {6C2B} FILL CURRENT BYTE
INY ; {2C1B} INCREMENT INDEX {NZ}
BNE :FULLPG ; {3C2B} BRANCH IF NOT DONE W/ PAGE
INC ]ADDR+1 ; {5C2B} ADVANCE TO NEXT PAGE {NZ}
DEX ; {2C1B} DECREMENT COUNTER {NZ}
BNE :FULLPG ; {3C2B} BRANCH IF NOT DONE W/ PAGES
*
** DO THE REMAINING PARTIAL PAGE
** REGISTER A STILL CONTAINS VALUE
*
:PARTPG
LDX ]SIZE ; ++<3C2B> GET # OF BYTES IN LAST PAGE
BEQ :EXIT ; ++<3C2B> BRANCH IF LOW BYTE = 0
LDY #0 ; ++<2C2B> RESET INDEX
LDX ]SIZE ; {3C2B} GET # OF BYTES IN LAST PAGE {NZ}
BEQ :EXIT ; {3C2B} BRANCH IF LOW BYTE = 0
LDY #0 ; {2C2B} RESET INDEX {NZ}
:PARTLP
STA (]ADDR),Y ; ++<6C2B> STORE VAL
INY ; ++<2C1B> INCREMENT INDEX
DEX ; ++<2C1B> DECREMENT COUNTER
BNE :PARTLP ; ++<3C2B> BRANCH IF NOT DONE
STA (]ADDR),Y ; {6C2B} STORE VAL
INY ; {2C1B} INCREMENT INDEX {NZ}
DEX ; {2C1B} DECREMENT COUNTER {NZ}
BNE :PARTLP ; {3C2B} BRANCH IF NOT DONE
:EXIT
RTS ; ++<6C1B>
RTS ; {6C1B}
*
*``````````````````````````````*
* MEMMOVE (LEVENTHAL/SEVILLE) *
* *
* ADAPTED FROM LEVANTHAL AND *
* SEVILLE'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. COPIES *
* SERIES OF BYTES FROM SRCLOC *
* TO DESTLOC. *
* ADAPTED FROM LEVANTHAL AND *
* SEVILLE'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. COPIES *
* SERIES OF BYTES FROM SRCLOC *
* TO DESTLOC. *
* *
* INPUT: *
* *
@@ -340,7 +342,7 @@ MEMFILL
* WPAR2 = DESTINATION ADDRESS *
* *
* DESTROY: NZCIDV *
* *
* ^^^ ^ *
* *
* CYCLES: 207+ *
* BYTES: 117 *
@@ -361,62 +363,62 @@ MEMMOVE
** 64K) IS LESS THAN NUMBER
** OF BYTES TO MOVE.
*
LDA ]ADDR2 ; ++<3C2B> CALC DEST-SRC
SEC ; ++<2C1B> SET CARRY
SBC ]ADDR1 ; ++<3C2B> SUBTRACT SOURCE ADDRESS
TAX ; ++<2C1B> HOLD VAL IN .X
LDA ]ADDR2+1 ; ++<3C2B>
SBC ]ADDR1+1 ; ++<3C2B> MOD 64K AUTOMATIC
LDA ]ADDR2 ; {3C2B} CALC DEST-SRC {NZ}
SEC ; {2C1B} SET CARRY {C=1}
SBC ]ADDR1 ; {3C2B} SUBTRACT SOURCE ADDRESS {NZCV}
TAX ; {2C1B} HOLD VAL IN .X {NZ}
LDA ]ADDR2+1 ; {3C2B} {NZ}
SBC ]ADDR1+1 ; {3C2B} MOD 64K AUTOMATIC {NZCV}
; -- DISCARD CARRY
TAY ; ++<2C1B> HOLD HIBYTE IN .Y
TXA ; ++<2C1B> CMP LOBYTE WITH # TO MOVE
CMP ]SIZE ; ++<3C2B>
TYA ; ++<2C1B>
SBC ]SIZE+1 ; ++<3C2B> SUBTRACT SIZE+1 FROM HIBYTE
BCS :DOLEFT ; ++<3C2B> BRANCH IF NO OVERLAP
TAY ; {2C1B} HOLD HIBYTE IN .Y {NZ}
TXA ; {2C1B} CMP LOBYTE WITH # TO MOVE {NZ}
CMP ]SIZE ; {3C2B} {NZC}
TYA ; {2C1B} {NZ}
SBC ]SIZE+1 ; {3C2B} SUBTRACT SIZE+1 FROM HIBYTE {NZCV}
BCS :DOLEFT ; {3C2B} BRANCH IF NO OVERLAP
*
** DEST AREA IS ABOVE SRC AREA
** BUT OVERLAPS IT.
** MOVE FROM HIGHEST ADDR TO
** AVOID DESTROYING DATA
*
JSR :MVERHT ; ++<3C6B>
JMP :MREXIT ; ++<3C3B>
JSR :MVERHT ; {3C6B}
JMP :MREXIT ; {3C3B}
*
** NO PROB DOING ORDINARY MOVE
** STARTING AT LOWEST ADDR
*
:DOLEFT
JSR :MVELEFT ; ++<6C3B>
JSR :MVELEFT ; {6C3B}
:EXIT
JMP :MREXIT ; ++<3C3B>
JMP :MREXIT ; {3C3B}
:MVELEFT
LDY #0 ; ++<2C2B> ZERO INDEX
LDX ]SIZE+1 ; ++<3C2B> X=# OF FULL PP TO MOVE
BEQ :MLPART ; ++<3C2B> IF X=0, DO PARTIAL PAGE
LDY #0 ; {2C2B} ZERO INDEX {NZ}
LDX ]SIZE+1 ; {3C2B} X=# OF FULL PP TO MOVE {NZ}
BEQ :MLPART ; {3C2B} IF X=0, DO PARTIAL PAGE
:MLPAGE
LDA (]ADDR1),Y ; ++<6C2B> LOAD BYTE FROM SOURCE
STA (]ADDR2),Y ; ++<6C2B> MOVE BYTE TO DESTINATION
INY ; ++<2C1B> NEXT BYTE
BNE :MLPAGE ; ++<3C2B> CONT UNTIL 256B MOVED
INC ]ADDR1+1 ; ++<5C2B> ADV TO NEXT SRC PAGE
INC ]ADDR2+1 ; ++<5C2B> ADV NEXT DEST PAGE
DEX ; ++<2C1B> DEC PAGE COUNT
BNE :MLPAGE ; ++<3C2B> CONT UNTIL ALL FULL
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM SOURCE {NZ}
STA (]ADDR2),Y ; {6C2B} MOVE BYTE TO DESTINATION
INY ; {2C1B} NEXT BYTE {NZ}
BNE :MLPAGE ; {3C2B} CONT UNTIL 256B MOVED
INC ]ADDR1+1 ; {5C2B} ADV TO NEXT SRC PAGE {NZ}
INC ]ADDR2+1 ; {5C2B} ADV NEXT DEST PAGE {NZ}
DEX ; {2C1B} DEC PAGE COUNT {NZ}
BNE :MLPAGE ; {3C2B} CONT UNTIL ALL FULL
; PAGES ARE MOVED
:MLPART
LDX ]SIZE ; ++<3C2B> GET LENGTH OF LAST PAGE
BEQ :MLEXIT ; ++<3C2B> BR IF LENGTH OF LAST
LDX ]SIZE ; {3C2B} GET LENGTH OF LAST PAGE {NZ}
BEQ :MLEXIT ; {3C2B} BR IF LENGTH OF LAST
; PAGE = 0
; REG Y IS 0
:MLLAST
LDA (]ADDR1),Y ; ++<6C2B> LOAD BYTE FROM SOURCE
STA (]ADDR2),Y ; ++<6C2B> MOVE BYTE TO DESTINATION
INY ; ++<2C1B> NEXT BYTE
DEX ; ++<2C1B> DEC COUNTER
BNE :MLLAST ; ++<3C2B> CONT UNTIL LAST P DONE
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM SOURCE {NZ}
STA (]ADDR2),Y ; {6C2B} MOVE BYTE TO DESTINATION
INY ; {2C1B} NEXT BYTE {NZ}
DEX ; {2C1B} DEC COUNTER {NZ}
BNE :MLLAST ; {3C2B} CONT UNTIL LAST P DONE
:MLEXIT
JMP :MREXIT ; ++<3C3B>
JMP :MREXIT ; {3C3B}
*
********************************
*
@@ -424,41 +426,41 @@ MEMMOVE
*
** -- MOVE THE PARTIAL PAGE FIRST
*
LDA ]SIZE+1 ; ++<3C2B> GET SIZE HIBYTE
CLC ; ++<2C1B> CLEAR CARRY
ADC ]ADDR1+1 ; ++<3C2B> ADD SOURCE ADDRESS HIBYTE
STA ]ADDR1+1 ; ++<3C2B> POINT TO LAST PAGE OF SRC
LDA ]SIZE+1 ; ++<3C2B> GET SIZE HIBYTE
CLC ; ++<2C1B> CLEAR CARRY
ADC ]ADDR2+1 ; ++<3C2B> ADD DESTINATION HIBYTE
STA ]ADDR2+1 ; ++<3C2B> POINT TO LAST P OF DEST
LDA ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
CLC ; {2C1B} CLEAR CARRY {C=0}
ADC ]ADDR1+1 ; {3C2B} ADD SOURCE ADDRESS HIBYTE {NZCV}
STA ]ADDR1+1 ; {3C2B} POINT TO LAST PAGE OF SRC
LDA ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
CLC ; {2C1B} CLEAR CARRY {C=0}
ADC ]ADDR2+1 ; {3C2B} ADD DESTINATION HIBYTE {NZCV}
STA ]ADDR2+1 ; {3C2B} POINT TO LAST P OF DEST
*
** MOVE THE LAST PARTIAL PAGE FIRST
*
LDY ]SIZE ; ++<3C2B> GET LENGTH OF LAST PAGE
BEQ :MRPAGE ; ++<3C2B> IF Y=0 DO THE FULL PAGES
LDY ]SIZE ; {3C2B} GET LENGTH OF LAST PAGE {NZ}
BEQ :MRPAGE ; {3C2B} IF Y=0 DO THE FULL PAGES
:MR0
DEY ; ++<2C1B> BACK UP Y TO NEXT BYTE
LDA (]ADDR1),Y ; ++<6C2B> LOAD CURRENT SOURCE BYTE
STA (]ADDR2),Y ; ++<6C2B> STORE IN CURRENT DESTINATION
CPY #0 ; ++<2C2B> BRANCH IF NOT DONE
BNE :MR0 ; ++<3C2B> WITH THE LAST PAGE
DEY ; {2C1B} BACK UP Y TO NEXT BYTE {NZ}
LDA (]ADDR1),Y ; {6C2B} LOAD CURRENT SOURCE BYTE {NZ}
STA (]ADDR2),Y ; {6C2B} STORE IN CURRENT DESTINATION
CPY #0 ; {2C2B} BRANCH IF NOT DONE {NZC}
BNE :MR0 ; {3C2B} WITH THE LAST PAGE
:MRPAGE
LDX ]SIZE+1 ; ++<3C2B> GET SIZE HIBYTE
BEQ :MREXIT ; ++<3C2B> BR IF HYBYTE = 0 (NO FULL P)
LDX ]SIZE+1 ; {3C2B} GET SIZE HIBYTE {NZ}
BEQ :MREXIT ; {3C2B} BR IF HYBYTE = 0 (NO FULL P)
:MR1
DEC ]ADDR1+1 ; ++<5C2B> BACK UP TO PREV SRC PAGE
DEC ]ADDR2+1 ; ++<5C2B> TO DEST
DEC ]ADDR1+1 ; {5C2B} BACK UP TO PREV SRC PAGE {NZ}
DEC ]ADDR2+1 ; {5C2B} TO DEST {NZ}
:MR2
DEY ; ++<2C1B> BACK UP Y TO NEXT BYTE
LDA (]ADDR1),Y ; ++<6C2B> LOAD SOURCE CURRENT BYTE
STA (]ADDR2),Y ; ++<6C2B> STORE BYTE IN DESTINATION
CPY #0 ; ++<2C2B> IF NOT DONE WITH PAGE
BNE :MR2 ; ++<3C2B> THEN BRANCH OUT
DEX ; ++<2C1B> DECREASE BYTE COUNTER
BNE :MR1 ; ++<3C2B> BR IF NOT ALL PAGES MOVED
DEY ; {2C1B} BACK UP Y TO NEXT BYTE {NZ}
LDA (]ADDR1),Y ; {6C2B} LOAD SOURCE CURRENT BYTE {NZ}
STA (]ADDR2),Y ; {6C2B} STORE BYTE IN DESTINATION
CPY #0 ; {2C2B} IF NOT DONE WITH PAGE {NZC}
BNE :MR2 ; {3C2B} THEN BRANCH OUT
DEX ; {2C1B} DECREASE BYTE COUNTER {NZ}
BNE :MR1 ; {3C2B} BR IF NOT ALL PAGES MOVED
:MREXIT
RTS ; ++<6C1B>
RTS ; {6C1B}
*
*``````````````````````````````*
* MEMSWAP (NATHAN RIGGS) *
@@ -487,17 +489,17 @@ MEMMOVE
]ADDR2 EQU WPAR2 ; SOURCE ADDRESS 2
*
MEMSWAP
LDY #255 ; ++<2C2B> RESET BYTE INDEX
LDY #255 ; {2C2B} RESET BYTE INDEX {NZ}
:LP
INY ; ++<2C1B> INCREASE BYTE INDEX
LDA (]ADDR1),Y ; ++<6C2B> LOAD BYTE FROM FIRST ADDRESS
TAX ; ++<2C1B> TRANSFER TO .X
LDA (]ADDR2),Y ; ++<6C2B> LOAD BYTE FROM SECOND ADDRESS
STA (]ADDR1),Y ; ++<6C2B> STORE IN FIRST ADDRESS
TXA ; ++<2C1B> TRANSFER FIRST BYTE VAL TO .A
STA (]ADDR2),Y ; ++<6C2B> NOW STORE THAT IN SECOND ADDRESS
CPY ]SIZE ; ++<3C2B> IF BYTE INDEX < LENGTH,
BNE :LP ; ++<3C2B> CONTINUE LOOPING
RTS ; ++<6C1B> OTHERWISE, EXIT
INY ; {2C1B} INCREASE BYTE INDEX {NZ}
LDA (]ADDR1),Y ; {6C2B} LOAD BYTE FROM FIRST ADDRESS {NZ}
TAX ; {2C1B} TRANSFER TO .X {NZ}
LDA (]ADDR2),Y ; {6C2B} LOAD BYTE FROM SECOND ADDRESS {NZ}
STA (]ADDR1),Y ; {6C2B} STORE IN FIRST ADDRESS
TXA ; {2C1B} TRANSFER FIRST BYTE VAL TO .A {NZ}
STA (]ADDR2),Y ; {6C2B} NOW STORE THAT IN SECOND ADDRESS
CPY ]SIZE ; {3C2B} IF BYTE INDEX < LENGTH, {NZC}
BNE :LP ; {3C2B} CONTINUE LOOPING
RTS ; {6C1B} OTHERWISE, EXIT
*
RTS ; ++<6C1B>
RTS ; {6C1B}
+66 -66
View File
@@ -31,7 +31,7 @@
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 29-NOV-2019 *
* DATE: 11-MAR-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* *
@@ -69,7 +69,7 @@
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CALL MAC ; JMP ALIAS
JSR ]1 ; ++<3B6C>
JSR ]1 ; {3B6C}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -77,7 +77,7 @@ CALL MAC ; JMP ALIAS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
RET MAC ; RTS ALIAS
RTS ; ++<1BC6>
RTS ; {1BC6>
<<< ; END MACRO
*
*``````````````````````````````*
@@ -85,10 +85,10 @@ RET MAC ; RTS ALIAS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JA MAC ; JMP IF ABOVE
BCS ]ABOVE ; ++<2B3C>
BEQ ]EXIT ; ++<2B3C>
BCC ]EXIT ; ++<2B3C>
]ABOVE JMP ]1 ; ++<3B5C>
BCS ]ABOVE ; {2B3C}
BEQ ]EXIT ; {2B3C}
BCC ]EXIT ; {2B3C}
]ABOVE JMP ]1 ; {3B5C}
]EXIT
<<<
*
@@ -97,9 +97,9 @@ JA MAC ; JMP IF ABOVE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JAE MAC ; JMP IF ABOVE OR EQUAL
BCS ]ABEQ ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]ABEQ JMP ]1 ; ++<1B5C>
BCS ]ABEQ ; {2B3C}
JMP ]EXIT ; {1B5C}
]ABEQ JMP ]1 ; {1B5C}
]EXIT
<<<
*
@@ -108,9 +108,9 @@ JAE MAC ; JMP IF ABOVE OR EQUAL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JB MAC ; JMP IF BELOW
BCC ]BELOW ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]BELOW JMP ]1 ; ++<1B5C>
BCC ]BELOW ; {2B3C}
JMP ]EXIT ; {1B5C}
]BELOW JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -118,10 +118,10 @@ JB MAC ; JMP IF BELOW
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JBE MAC ; JMP IF BELOW OR EQUAL
BEQ ]BELEQ ; ++<2B3C>
BCC ]BELEQ ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]BELEQ JMP ]1 ; ++<1B5C>
BEQ ]BELEQ ; {2B3C}
BCC ]BELEQ ; {2B3C}
JMP ]EXIT ; {1B5C}
]BELEQ JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -129,7 +129,7 @@ JBE MAC ; JMP IF BELOW OR EQUAL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JC MAC ; JUMP ON CARRY
JB ]1 ++<[4B8C]>
JB ]1 {4B8C}
<<<
*
*``````````````````````````````*
@@ -137,9 +137,9 @@ JC MAC ; JUMP ON CARRY
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JE MAC ; JUMP IF EQUAL
BEQ ]EQ ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]EQ JMP ]1 ; ++<1B5C>
BEQ ]EQ ; {2B3C}
JMP ]EXIT ; {1B5C}
]EQ JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -147,7 +147,7 @@ JE MAC ; JUMP IF EQUAL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JG MAC ; JUMP IF GREATER THAN
JA ]1 ; ++<[9B11C]>
JA ]1 ; {9B11C}
<<<
*
*``````````````````````````````*
@@ -155,7 +155,7 @@ JG MAC ; JUMP IF GREATER THAN
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JGE MAC ; JUMP IF EQUAL OR GREATER
JAE ]1 ; ++<[4B8C]>
JAE ]1 ; {4B8C}
<<<
*
*``````````````````````````````*
@@ -163,7 +163,7 @@ JGE MAC ; JUMP IF EQUAL OR GREATER
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JL MAC ; JUMP IF LESS THAN
JB ]1 ; +<[4B8C]>
JB ]1 ; {4B8C}
]EXIT <<<
*
*``````````````````````````````*
@@ -171,7 +171,7 @@ JL MAC ; JUMP IF LESS THAN
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JLE MAC ; JUMP IF LESS OR EQUAL
JBE ]1 ; ++<[6B11C]>
JBE ]1 ; {6B11C}
<<<
*
*``````````````````````````````*
@@ -179,9 +179,9 @@ JLE MAC ; JUMP IF LESS OR EQUAL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JNC MAC ; JUMP IF NO CARRY
BCC ]CLR ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]CLR JMP ]1 ; ++<1B5C>
BCC ]CLR ; {2B3C}
JMP ]EXIT ; {1B5C}
]CLR JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -189,9 +189,9 @@ JNC MAC ; JUMP IF NO CARRY
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JNE MAC ; JUMP IF NOT EQUAL
BNE ]NE ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]NE JMP ]1 ; ++<1B5C>
BNE ]NE ; {2B3C}
JMP ]EXIT ; {1B5C}
]NE JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -199,9 +199,9 @@ JNE MAC ; JUMP IF NOT EQUAL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JZ MAC ; JUMP IF ZERO
BEQ ]ZERO ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]ZERO JMP ]1 ; ++<1B5C>
BEQ ]ZERO ; {2B3C}
JMP ]EXIT ; {1B5C}
]ZERO JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -209,9 +209,9 @@ JZ MAC ; JUMP IF ZERO
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JNZ MAC ; JUMP IF NOT ZERO
BNE ]NOTZ ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]NOTZ JMP ]1 ; ++<1B5C>
BNE ]NOTZ ; {2B3C}
JMP ]EXIT ; {1B5C}
]NOTZ JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -219,9 +219,9 @@ JNZ MAC ; JUMP IF NOT ZERO
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JS MAC ; JUMP IF SIGNED
BPL ]PLUS ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]PLUS JMP ]1 ; ++<1B5C>
BPL ]PLUS ; {2B3C}
JMP ]EXIT ; {1B5C}
]PLUS JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -229,9 +229,9 @@ JS MAC ; JUMP IF SIGNED
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JNS MAC ; JUMP IF NOT SIGNED
BMI ]MIN ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]MIN JMP ]1 ; ++<1B5C>
BMI ]MIN ; {2B3C}
JMP ]EXIT ; {1B5C}
]MIN JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -239,9 +239,9 @@ JNS MAC ; JUMP IF NOT SIGNED
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JO MAC ; JUMP IF OVERFLOW
BVS ]OV ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]OV JMP ]1 ; ++<1B5C>
BVS ]OV ; {2B3C}
JMP ]EXIT ; {1B5C}
]OV JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -249,9 +249,9 @@ JO MAC ; JUMP IF OVERFLOW
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JNO MAC ; JUMP IF NO OVERFLOW
BVC ]NOV ; ++<2B3C>
JMP ]EXIT ; ++<1B5C>
]NOV JMP ]1 ; ++<1B5C>
BVC ]NOV ; {2B3C}
JMP ]EXIT ; {1B5C}
]NOV JMP ]1 ; {1B5C}
]EXIT <<<
*
*``````````````````````````````*
@@ -264,10 +264,10 @@ JNO MAC ; JUMP IF NO OVERFLOW
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ANC MAC ; ADD NO CARRY
CLC ; ++<1B2C>
LDA ]1 ; ++<3B4C>
ADC ]2 ; ++<3B4C>
CLC ; ++<1B2C>
CLC ; {1B2C}
LDA ]1 ; {3B4C} {NZ}
ADC ]2 ; {3B4C} {NZCV}
CLC ; {1B2C} {C=0}
<<<
*
*``````````````````````````````*
@@ -280,10 +280,10 @@ ANC MAC ; ADD NO CARRY
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SNC MAC ; SUBTRACT NO CARRY
SEC ; ++<1B2C>
LDA ]1 ; ++<3B4C>
SBC ]2 ; ++<3B4C>
SEC ; ++<1B2C>
SEC ; {1B2C} {C=1}
LDA ]1 ; {3B4C} {NZ}
SBC ]2 ; {3B4C} {NZCV}
SEC ; {1B2C} {C=1}
<<<
*
*``````````````````````````````*
@@ -292,10 +292,10 @@ SNC MAC ; SUBTRACT NO CARRY
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUSHA MAC ; PUSH ALL REGISTERS
PHP ; ++<1B3C>
PHA ; ++<1B3C>
CPHY ; ++<6B12C>
CPHX ; ++<6B12C>
PHP ; {1B3C}
PHA ; {1B3C}
CPHY ; {6B12C}
CPHX ; {6B12C}
<<<
*
*``````````````````````````````*
@@ -304,10 +304,10 @@ PUSHA MAC ; PUSH ALL REGISTERS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PULLA MAC ; PULL ALL REGISTERS
CPLX ; ++<11B6C>
CPLY ; ++<11B7C>
PLA ; ++<1B3C>
PLP ; ++<1B3C>
CPLX ; {11B6C}
CPLY ; {11B7C}
PLA ; {1B3C} {NZ}
PLP ; {1B3C} {NZCIDV}
<<<
*
*``````````````````````````````*
@@ -316,5 +316,5 @@ PULLA MAC ; PULL ALL REGISTERS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
POPA MAC ; PULL ALL REGISTERS
PULLA ; ++<[24B19C]>
PULLA ; {24B19C}
<<<
+6 -6
View File
@@ -15,7 +15,7 @@
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CALL MAC
JSR ]1 ; ++<3B6C>
JSR ]1 ; {3B6C}
<<<
*
*``````````````````````````````*
@@ -23,7 +23,7 @@ CALL MAC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CPL MAC
EOR $FF ; ++<2B2C>
EOR $FF ; {2B2C} {NZ}
<<<
*
*``````````````````````````````*
@@ -31,7 +31,7 @@ CPL MAC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JP MAC
JMP ]1 ; <1B5C>
JMP ]1 ; <1B5C}
<<<
*
*``````````````````````````````*
@@ -48,7 +48,7 @@ LD MAC ; NOT YET
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
POP MAC
PLA ; ++<1B4C>
PLA ; {1B4C} {NZ}
<<<
*
*``````````````````````````````*
@@ -56,7 +56,7 @@ POP MAC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
RET MAC
RTS ; ++<1B6C>
RTS ; {1B6C}
<<<
*
*``````````````````````````````*
@@ -64,6 +64,6 @@ RET MAC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SCF MAC
SEC ; ++<1B2C>
SEC ; {1B2C} {C=1}
<<<
*
+192 -214
View File
@@ -13,7 +13,7 @@
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 29-NOV-2019 *
* DATE: 11-MAR-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
* *
@@ -55,7 +55,6 @@
* GBIT : GET BIT FROM BYTE *
* GRET : GET RETURN *
* MFILL : FILL MEMORY BLOCK *
* MOV : MOVE SRC TO DEST *
* MOVB : MOVE MEMORY BLOCK *
* MSWAP : SWAP MEMORY BLOCKS *
* PEEK : LOAD .A FROM ADDR *
@@ -79,11 +78,11 @@
*
_AXLIT MAC ; CHECK IF LITERAL
IF #=]1 ; IF ]1 IS A LITERAL
LDX ]1/$100 ; ++<4C3B> GET HIGH
LDA ]1 ; ++<4C3B> GET LOW
LDX ]1/$100 ; {4C3B} GET HIGH {NZ}
LDA ]1 ; {4C3B} GET LOW {NZ}
ELSE ; OTHERWISE, ]1 IS AN ADDR
LDX ]1+1 ; ++<4C3B> SO GET HIGH VALUE
LDA ]1 ; ++<4C3B> THEN LOW VALUE
LDX ]1+1 ; {4C3B} SO GET HIGH VALUE {NZ}
LDA ]1 ; {4C3B} THEN LOW VALUE {NZ}
FIN ; END IF
<<< ; END MACRO
*
@@ -108,13 +107,13 @@ _AXLIT MAC ; CHECK IF LITERAL
*
_AXSTR MAC ; CHECK IF STRING
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCNT2 ; ++<3C3B> SKIP STRING DEC
]STRTMP STR ]1 ; ++<0C1B+> STR DECLARATION
JMP __STRCNT2 ; {3C3B} SKIP STRING DEC
]STRTMP STR ]1 ; {0C1B+} STR DECLARATION
__STRCNT2 ; SKIP TO HERE
LDX #>]STRTMP ; ++<4C3B> GET HIBYTE OF STRING
LDA #<]STRTMP ; ++<4C3B> GET LO BYTE
LDX #>]STRTMP ; {4C3B} GET HIBYTE OF STRING {NZ}
LDA #<]STRTMP ; {4C3B} GET LO BYTE {NZ}
ELSE ; OTHERWISE, ]1 IS ADDRESS
_AXLIT ]1 ; ++<(8C6B)> TEST OF LITERAL OR NOT
_AXLIT ]1 ; {8C6B} TEST OF LITERAL OR NOT
FIN ; END IF
<<<
*
@@ -136,15 +135,15 @@ __STRCNT2 ; SKIP TO HERE
*
_ISLIT MAC ; CHECK IF LITERAL
IF #=]1 ; IF ]1 IS A LITERAL
LDA ]1/$100 ; ++<4C3B> GET HIGH BYTE
PHA ; ++<3C1B> PUSH .A TO STACK
LDA ]1 ; ++<4C3B> GET LOW BYTE
PHA ; ++<3C1B> PUSH .A TO STACK
LDA ]1/$100 ; {4C3B} GET HIGH BYTE {NZ}
PHA ; {3C1B} PUSH .A TO STACK
LDA ]1 ; {4C3B} GET LOW BYTE {NZ}
PHA ; {3C1B} PUSH .A TO STACK
ELSE ; OTHERWISE, ]1 IS ADDRESS
LDA ]1+1 ; ++<4C3B> SO GET HIGH NIBBLE
PHA ; ++<3C1B> PUSH .A TO STACK
LDA ]1 ; ++<4C3B> THEN GET LOW NIBBLE
PHA ; ++<3C1B> AND PUSH TO STACK
LDA ]1+1 ; {4C3B} SO GET HIGH NIBBLE {NZ}
PHA ; {3C1B} PUSH .A TO STACK
LDA ]1 ; {4C3B} THEN GET LOW NIBBLE {NZ}
PHA ; {3C1B} AND PUSH TO STACK
FIN ; END IF
<<<
*
@@ -168,15 +167,15 @@ _ISLIT MAC ; CHECK IF LITERAL
*
_ISSTR MAC ; CHECK IF STRING
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCONT ; ++<3C3B> KIP STRING DEC
]STRTMP STR ]1 ; ++<0C1+B> DECLARE STRING
JMP __STRCONT ; {3C3B} KIP STRING DEC
]STRTMP STR ]1 ; {0C1+B} DECLARE STRING
__STRCONT
LDA #>]STRTMP ; ++<2C2B> GET HI VAL
PHA ; ++<3C1B> PUSH .A TO STACK
LDA #<]STRTMP ; ++<2C2B> GET LO 2C,2B
PHA ; ++<3C1B> PUSH .A TO STACK
LDA #>]STRTMP ; {2C2B} GET HI VAL {NZ}
PHA ; {3C1B} PUSH .A TO STACK
LDA #<]STRTMP ; {2C2B} GET LO 2C,2B {NZ}
PHA ; {3C1B} PUSH .A TO STACK
ELSE ; OTHERIWSE ]1 IS AN ADDRESS
_ISLIT ]1 ; ++<[8C6B]> CHECK IF LITERAL
_ISLIT ]1 ; {8C6B} CHECK IF LITERAL
FIN ; END IF
<<<
*
@@ -199,15 +198,15 @@ __STRCONT
*
_MLIT MAC ; CHECK IF LITERAL
IF #=]1 ; IF ]1 IS A LITERAL
LDA ]1/$100 ; ++<4C3B> GET HI NIBBLE
STA ]2+1 ; ++<4C3B> STORE IN ZP
LDA ]1 ; ++<4C3B> THEN GET LO
STA ]2 ; ++<4C3B> STORE IN ZP
LDA ]1/$100 ; {4C3B} GET HI NIBBLE {NZ}
STA ]2+1 ; {4C3B} STORE IN ZP
LDA ]1 ; {4C3B} THEN GET LO {NZ}
STA ]2 ; {4C3B} STORE IN ZP
ELSE ; OTHERIWSE ]1 IS ADDRESS
LDA ]1+1 ; ++<4C3B> SO GET HIGH NIB
STA ]2+1 ; ++<4C3B> AND STORE IN ZP
LDA ]1 ; ++<4C3B> THEN GET LOW NIB
STA ]2 ; ++<4C4B> AND STORE IN ZP
LDA ]1+1 ; {4C3B} SO GET HIGH NIB {NZ}
STA ]2+1 ; {4C3B} AND STORE IN ZP
LDA ]1 ; {4C3B} THEN GET LOW NIB {NZ}
STA ]2 ; {4C4B} AND STORE IN ZP
FIN ; END IF
<<<
*
@@ -232,15 +231,15 @@ _MLIT MAC ; CHECK IF LITERAL
*
_MSTR MAC ; CHECK IF STRING
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCONT ; ++<3C3B> SKIP STRING DEC
]STRTMP STR ]1 ; ++<OC1+B> DECLARE STRING
JMP __STRCONT ; {3C3B} SKIP STRING DEC
]STRTMP STR ]1 ; {OC1+B} DECLARE STRING
__STRCONT ; CONTINUE
LDA #>]STRTMP ; ++<2C2B> GET HI NIB OF ADDR
STA ]2+1 ; ++<4C3B> STORE IN ZP
LDA #<]STRTMP ; ++<2C2B> GET LOW NIB
STA ]2 ; ++<4C3B> SPRE ON ZP
LDA #>]STRTMP ; {2C2B} GET HI NIB OF ADDR {NZ}
STA ]2+1 ; {4C3B} STORE IN ZP
LDA #<]STRTMP ; {2C2B} GET LOW NIB {NZ}
STA ]2 ; {4C3B} SPRE ON ZP
ELSE ; OTHERWISE ]1 IS ADDRESS
_ISLIT ]1 ; ++<[8C6B]> CHECK IF LITERAL
_MLIT ]1;]2 ; {8C6B} CHECK IF LITERAL
FIN ; END IF
<<< ; END MACRO
*
@@ -259,11 +258,11 @@ __STRCONT ; CONTINUE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PRN MAC ; PRINT STRING
STY SCRATCH ; ++<3C2B> PRESERVE .Y
JSR __P ; ++<6C3B[155C+]> PRINT THE STRING
ASC ]1 ; ++<0C1B+> HOLD STRING HERE
HEX 00 ; ++<0C1B> KILL STRING PRINT
LDY SCRATCH ; ++<3C2B> RESTORE .Y
STY SCRATCH ; {3C2B} PRESERVE .Y
JSR __P ; {161C3B} PRINT THE STRING {NZCV}
ASC ]1 ; {0C1B+} HOLD STRING HERE
HEX 00 ; {0C1B} KILL STRING PRINT
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -278,10 +277,10 @@ _PRN MAC ; PRINT STRING
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_WAIT MAC ; WAIT FOR KEYPRESS
]LP LDA ]KYBD ; ++<4C3B> CHECK FOR KEYPRESS
BPL ]LP ; ++<4C2B> IF NOT, KEEP LOOPING
AND #$7F ; ++<2C2B> SET HIGH BIT
STA ]STROBE ; ++<4C3B> RESET KYBD STROBE
]LP LDA ]KYBD ; {4C3B} CHECK FOR KEYPRESS {NZ}
BPL ]LP ; {4C2B} IF NOT, KEEP LOOPING
AND #$7F ; {2C2B} SET HIGH BIT {NZ}
STA ]STROBE ; {4C3B} RESET KYBD STROBE
<<< ; END MACRO
*
*``````````````````````````````*
@@ -298,9 +297,9 @@ _WAIT MAC ; WAIT FOR KEYPRESS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BCCL MAC ; LONG BCC
BCC ]TOBCC ; ++<4C2B> IF CARRY CLEAR, BRANCH
]NOBCC JMP ]EXIT ; ++<3C3B> OTHER, RETURN
]TOBCC JMP ]1 ; ++<3C3B> JMP TO BCC BRANCH LOC
BCC ]TOBCC ; {4C2B} IF CARRY CLEAR, BRANCH
]NOBCC JMP ]EXIT ; {3C3B} OTHER, RETURN
]TOBCC JMP ]1 ; {3C3B} JMP TO BCC BRANCH LOC
]EXIT ; CARRY WASN'T CLEAR
<<< ; END MACRO
*
@@ -314,9 +313,9 @@ BCCL MAC ; LONG BCC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BCSL MAC ; LONG LCS
BCS ]TOBCS ; ++<4C2B> IF CARRY SET, THEN BRANCH
]NOBCS JMP ]EXIT ; ++<3C3B> OTHERWISE, DON'T BRANCH
]TOBCS JMP ]1 ; ++<3C3B> JMP TO BRANCH
BCS ]TOBCS ; {4C2B} IF CARRY SET, THEN BRANCH
]NOBCS JMP ]EXIT ; {3C3B} OTHERWISE, DON'T BRANCH
]TOBCS JMP ]1 ; {3C3B} JMP TO BRANCH
]EXIT ; EXIT LABEL
<<< ; END MACRO
*
@@ -334,14 +333,14 @@ BCSL MAC ; LONG LCS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BEEP MAC ; ROUTINE BEEP
STY SCRATCH ; ++<3C2B> BACKUP .Y REGISTER
LDX ]1 ; ++<4C3B> LOAD BEEP LENGTH
STY SCRATCH ; {3C2B} BACKUP .Y REGISTER
LDX ]1 ; {4C3B} LOAD BEEP LENGTH {NZ}
]LP1
JSR BELL ; ++<6C3B[84C]> JSR TO BELL ROUTINE
DEX ; ++<2C1B> DECREASE .X COUNTER
CPX #0 ; ++<2C2B> CMP .X TO ZERO
BNE ]LP1 ; ++<4C2B> IF !=, LOP
LDY SCRATCH ; ++<3C2B> OTHERWISE, RESTORE .Y
JSR BELL ; {90C3B} JSR TO BELL ROUTINE
DEX ; {2C1B} DECREASE .X COUNTER {NZ}
CPX #0 ; {2C2B} CMP .X TO ZERO {NZC}
BNE ]LP1 ; {4C2B} IF !=, LOOP
LDY SCRATCH ; {3C2B} OTHERWISE, RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -354,9 +353,9 @@ BEEP MAC ; ROUTINE BEEP
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BEQL MAC ; LONG BEQ
BEQ ]TOBEQ ; ++<4C2B> IF CMP EQUAL OR 0, BRANCH
]NOBEQ JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBEQ JMP ]1 ; ++<3C3B> JUMP TO BRANCH
BEQ ]TOBEQ ; {4C2B} IF CMP EQUAL OR 0, BRANCH
]NOBEQ JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBEQ JMP ]1 ; {3C3B} JUMP TO BRANCH
]EXIT ; EXIT LABEL
<<< ; END MACRO
*
@@ -370,9 +369,9 @@ BEQL MAC ; LONG BEQ
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BNEL MAC ; LONG BNE
BNE ]TOBNE ; ++<4C2B> IF CMP != OR !=0, BRANCH
]NOBNE JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBNE JMP ]1 ; ++<3C3B> JUMP TO BRANCH ADDR
BNE ]TOBNE ; {4C2B} IF CMP != OR !=0, BRANCH
]NOBNE JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBNE JMP ]1 ; {3C3B} JUMP TO BRANCH ADDR
]EXIT ; QUITTING LABEL
<<< ; END MACRO
*
@@ -386,9 +385,9 @@ BNEL MAC ; LONG BNE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BMIL MAC ; LONG BMI
BMI ]TOBMI ; ++<4C2B> IF NEGATIVE SET, BRANCH
]NOBMI JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBMI JMP ]1 ; ++<3C3B> JUMP TO BRANCH ADDRESS
BMI ]TOBMI ; {4C2B} IF NEGATIVE SET, BRANCH
]NOBMI JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBMI JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
]EXIT ; QUIT LABEL
<<< ; END MACRO
*
@@ -402,9 +401,9 @@ BMIL MAC ; LONG BMI
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BPLL MAC ; LONG BPL
BPL ]TOBPL ; ++<4C2B> IF NOT NEGATIVE, BRANCH
]NOBPL JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBPL JMP ]1 ; ++<3C3B> JUMP TO BRANCH ADDRESS
BPL ]TOBPL ; {4C2B} IF NOT NEGATIVE, BRANCH
]NOBPL JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBPL JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
]EXIT ; QUIT
<<< ; END MACRO
*
@@ -419,9 +418,9 @@ BPLL MAC ; LONG BPL
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BVCL MAC ; LONG BVC
BVC ]TOBVC ; ++<4C2B> IF OVERFLOW CLEAR, BRANCH
]NOBVC JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBVC JMP ]1 ; ++<3C3B> JUMP TO BRANCH ADDRESS
BVC ]TOBVC ; {4C2B} IF OVERFLOW CLEAR, BRANCH
]NOBVC JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBVC JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
]EXIT ; QUIT
<<< ; END MACRO
*
@@ -435,9 +434,9 @@ BVCL MAC ; LONG BVC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
BVSL MAC ; LONG BVS
BVS ]TOBVS ; ++<4C2B> OF OVERFLOW SET, BRANCH
]NOBVS JMP ]EXIT ; ++<3C3B> OTHERWISE, SKIP BRANCH
]TOBVS JMP ]1 ; ++<3C3B> JUMP TO BRANCH ADDRESS
BVS ]TOBVS ; {4C2B} OF OVERFLOW SET, BRANCH
]NOBVS JMP ]EXIT ; {3C3B} OTHERWISE, SKIP BRANCH
]TOBVS JMP ]1 ; {3C3B} JUMP TO BRANCH ADDRESS
]EXIT ; QUIT
<<< ; END MACRO
*
@@ -464,10 +463,10 @@ CBRA MAC ; BRANCH ALWAYS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CPHX MAC ; PUSH .X TO STACK
STA SCRATCH ; ++<3C2B> BACKUP .A CONTENTS
TXA ; ++<2C1B> TRANSFER .X TO .A
PHA ; ++<3C1B> PUSH .A
LDA SCRATCH ; ++<3C2B> RESTORE .A CONTENTS
STA SCRATCH ; {3C2B} BACKUP .A CONTENTS
TXA ; {2C1B} TRANSFER .X TO .A {NZ}
PHA ; {3C1B} PUSH .A
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -480,10 +479,10 @@ CPHX MAC ; PUSH .X TO STACK
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CPHY MAC ; PUSH .Y TO STACK
STA SCRATCH ; ++<3C2B> BACKUP .A
TYA ; ++<2C1B> TRANSFER .Y TO .A
PHA ; ++<3C1B> PUSH .A TO STACK
LDA SCRATCH ; ++<3C2B> RESTORE .A CONTENTS
STA SCRATCH ; {3C2B} BACKUP .A
TYA ; {2C1B} TRANSFER .Y TO .A {NZ}
PHA ; {3C1B} PUSH .A TO STACK
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -496,10 +495,10 @@ CPHY MAC ; PUSH .Y TO STACK
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CPLX MAC ; PULL FROM STACT TO .X
STA SCRATCH ; ++<3C2B> BACKUP .A
PLA ; ++<3C1B> PULL FROM STACK INTO .A
TAX ; ++<2C1B> TRANSFER .A TO .X
LDA SCRATCH ; ++<3C2B> RESTORE .A CONTENTS
STA SCRATCH ; {3C2B} BACKUP .A
PLA ; {3C1B} PULL FROM STACK INTO .A {NZ}
TAX ; {2C1B} TRANSFER .A TO .X {NZ}
LDA SCRATCH ; {3C2B} RESTORE .A CONTENTS {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -512,10 +511,10 @@ CPLX MAC ; PULL FROM STACT TO .X
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CPLY MAC ; PULL FROM STACK INTO .Y
STA SCRATCH ; ++<3C2B> BACKUP .A
PLA ; ++<3C1B> PULL FROM STACK TO .A
TAY ; ++<2C2B> TRANSFER A TO .Y
LDA SCRATCH ; ++<3C2B> RESTORE .A
STA SCRATCH ; {3C2B} BACKUP .A
PLA ; {3C1B} PULL FROM STACK TO .A {NZ}
TAY ; {2C2B} TRANSFER A TO .Y {NZ}
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -528,10 +527,10 @@ CPLY MAC ; PULL FROM STACK INTO .Y
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CTXY MAC ; TRANSFER X TO Y
STA SCRATCH ; ++<3C2B> BACKUP .A
TXA ; ++<2C1B> TRANSFER .X TO .A
TAY ; ++<2C1B> TRNSFER .A TO .Y
LDA SCRATCH ; ++<3C2B> RESTORE .A
STA SCRATCH ; {3C2B} BACKUP .A
TXA ; {2C1B} TRANSFER .X TO .A {NZ}
TAY ; {2C1B} TRNSFER .A TO .Y {N}
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -544,10 +543,10 @@ CTXY MAC ; TRANSFER X TO Y
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CTYX MAC ; TRANSFER .Y TO .X
STA SCRATCH ; ++<3C2B> BACKUP .A
TYA ; ++<2C1B> TRANSFER .Y TO .A
TAX ; ++<2C1B> TRANSFER .A TO .X
LDA SCRATCH ; ++<3C2B> RESTORE .A
STA SCRATCH ; {3C2B} BACKUP .A
TYA ; {2C1B} TRANSFER .Y TO .A {NZ}
TAX ; {2C1B} TRANSFER .A TO .X {NZ}
LDA SCRATCH ; {3C2B} RESTORE .A {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -556,17 +555,17 @@ CTYX MAC ; TRANSFER .Y TO .X
* CLEAR THE HIGH NIBBLE OF A *
* BYTE IN **.A**. *
* *
* CYCLES: 16 *
* CYCLES: 10 *
* SIZE: 6 BYTES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CLRHI MAC
*
AND #$F0 ; CLEAR 4 RIGHT BITS
LSR ; MOVE BITS RIGHT
LSR ; MOVE BITS RIGHT
LSR ; MOVE BITS RIGHT
LSR ; MOVE BITS RIGHT
AND #$F0 ; {2C2B} CLEAR 4 RIGHT BITS {NZ}
LSR ; {2C1B} MOVE BITS RIGHT {ZC,N=0}
LSR ; {2C1B} MOVE BITS RIGHT {ZC,N=0}
LSR ; {2C1B} MOVE BITS RIGHT {ZC,N=0}
LSR ; {2C1B} MOVE BITS RIGHT {ZC,N=0}
<<<
*
*``````````````````````````````*
@@ -583,10 +582,10 @@ CLRHI MAC
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DELAY MAC ; DELAY FOR MILLISECONDS
STY SCRATCH ; ++<3C2B> BACKUP .Y
LDY ]1 ; ++<4C3B> # OF MILLISECONDS
JSR DELAYMS ; ++<6C3B[39C]> DELAY SUBROUTINE
LDY SCRATCH ; ++<3C2B> RESTORE .Y
STY SCRATCH ; {3C2B} BACKUP .Y
LDY ]1 ; {4C3B} # OF MILLISECONDS {NZ}
JSR DELAYMS ; {45C3B} DELAY SUBROUTINE {NZC}
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -605,11 +604,11 @@ DELAY MAC ; DELAY FOR MILLISECONDS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DUMP MAC ; DUMP MEMORY CONTENTS
_AXLIT ]1 ; ++<[8C,6B]> CHECK LITERAL
STY SCRATCH ; ++<3C2B> BACKUP .Y
LDY ]2 ; ++<4C3B> LOAD .Y WITH LENGTH
JSR __DUMP ; ++<6C3B[787C]) DUMP CONTENTS
LDY SCRATCH ; ++<3C2B> RESTORE .Y
_AXLIT ]1 ; {8C6B} CHECK LITERAL
STY SCRATCH ; {3C2B} BACKUP .Y {NZ}
LDY ]2 ; {4C3B} LOAD .Y WITH LENGTH {NZ}
JSR __DUMP ; {794C3B} DUMP CONTENTS
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -626,12 +625,12 @@ DUMP MAC ; DUMP MEMORY CONTENTS
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
GBIT MAC ; GET A SINGLE BIT FROM BYTE
LDA ]1 ; ++<3B4C> BYTE TO CHECK
AND ]2 ; ++<3B4C> MASK BIT # REQUESTED VIA HOOK
BEQ ]ZERO ; ++<2B2C> IF IT'S A MATCH, THEN 0
LDA #1 ; ++<2B2C> OTHERWISE, BIT IS 1
JMP ]EXIT ; ++<3B3C> GOTO EXIT
]ZERO LDA #0 ; ++<2B2C> BIT IS 0
LDA ]1 ; {3B4C} BYTE TO CHECK {NZ}
AND ]2 ; {3B4C} MASK BIT # REQUESTED VIA HOOK {NZ}
BEQ ]ZERO ; {2B2C} IF IT'S A MATCH, THEN 0
LDA #1 ; {2B2C} OTHERWISE, BIT IS 1 {NZ}
JMP ]EXIT ; {3B3C} GOTO EXIT
]ZERO LDA #0 ; {2B2C} BIT IS 0 {NZ}
]EXIT <<<
*
*``````````````````````````````*
@@ -648,10 +647,10 @@ GBIT MAC ; GET A SINGLE BIT FROM BYTE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ERRH MAC ; SET ERROR HANDLE
STY SCRATCH ; ++<3C2B> BACKUP .Y
_AXLIT ; ++<[8C6B]> CHECK IF LITERAL
JSR __ERRH ; ++<6C3B[53C]> RUN ERROR HANDLE SET
LDY SCRATCH ; ++<3C2B> RESTORE .Y
STY SCRATCH ; {3C2B} BACKUP .Y
_AXLIT ; {8C6B} CHECK IF LITERAL
JSR __ERRH ; {59C3B} RUN ERROR HANDLE SET {NZ}
LDY SCRATCH ; {3C2B} RESTORE .Y {ZC}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -669,18 +668,18 @@ ERRH MAC ; SET ERROR HANDLE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
GRET MAC ; GET RETURN VALUE
STY SCRATCH ; ++<3C2B> BACKUP .y
_AXLIT ]1 ; ++<8C6B> CHECK LITERAL
STA ADDR1 ; ++<3C2B> LOBYTE PASSED IN .A
STX ADDR1+1 ; ++<3C2B> HIBYTE PASSED IN .X
LDY #255 ; ++<2C2B> RESET COUNTER
STY SCRATCH ; {3C2B} BACKUP .Y
_AXLIT ]1 ; {8C6B} CHECK LITERAL
STA ADDR1 ; {3C2B} LOBYTE PASSED IN .A
STX ADDR1+1 ; {3C2B} HIBYTE PASSED IN .X
LDY #255 ; {2C2B} RESET COUNTER {ZC}
]LP
INY ; ++<2C1B> INCREASE COUNTER
LDA RETURN,Y ; ++<5C3B> LOAD BYTE IN RETURN AT
STA (ADDR1),Y ; ++<6C2B> COUNTER OFFSET; STORE AT
CPY RETLEN ; ++<4C3B> NEW LOCATION
BNE ]LP ; ++<4C2B> IF COUNTER < RETLEN, LOOP
LDY SCRATCH ; ++<3C2B> RESTORE .Y
INY ; {2C1B} INCREASE COUNTER {ZC}
LDA RETURN,Y ; {5C3B} LOAD BYTE IN RETURN AT {ZC}
STA (ADDR1),Y ; {6C2B} COUNTER OFFSET; STORE AT
CPY RETLEN ; {4C3B} NEW LOCATION {NZC}
BNE ]LP ; {4C2B} IF COUNTER < RETLEN, LOOP
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -700,60 +699,14 @@ GRET MAC ; GET RETURN VALUE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MFILL MAC ; MEMORY FILL
STY SCRATCH ; ++<3C2B> BACKUP .Y REGISTER
_MLIT ]1;WPAR1 ; ++<[16C12B]> CHECK LITERAL OF ]1
_MLIT ]2;WPAR2 ; ++<[16C12B]> CHECK LITERAL OF ]2
LDA ]3 ; ++<4C3B> FILL VALUE
STA BPAR1 ; ++<3C2B> STORED IN BPAR1
JSR MEMFILL ; ++<6C3B[59+]> GOSUB ROUTINE
LDY SCRATCH ; ++<3C2B> RESTORE .Y
*
*``````````````````````````````*
* MOV *
* *
* COPY SOURCE TO DESTINATION *
* ADDRESS OR REGISTER. *
* *
* PARAMETERS *
* *
* ]1 = SOURCE ADD OR REGISTER *
* ]2 = DESTINATION ADDR / REG *
* *
* CYCLES: 267+ *
* BYTES: 48 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MOV MAC ; MEMORY MOVE
IF A=]1 ; .A REGISTER SOURCE
IF X=]2
TAX
ELSE
IF Y=]2
TAY
ELSE
STA ]2
FIN
FIN
FIN
IF $=]1
IF A=]2
LDA ]1
ELSE
IF X=]2
LDX ]1
ELSE
IF Y=]2
LDY ]1
ELSE
STY SCRATCH
LDY ]1
STY ]2
LDY SCRATCH
FIN
FIN
FIN
FIN
]EXIT <<< ; END MACRO
STY SCRATCH ; {3C2B} BACKUP .Y REGISTER
_MLIT ]1;WPAR1 ; {16C12B} CHECK LITERAL OF ]1
_MLIT ]2;WPAR2 ; {16C12B} CHECK LITERAL OF ]2
LDA ]3 ; {4C3B} FILL VALUE {NZ}
STA BPAR1 ; {3C2B} STORED IN BPAR1
JSR MEMFILL ; {6C3B59+} GOSUB ROUTINE
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<<
*
*``````````````````````````````*
* MOVB *
@@ -772,12 +725,12 @@ MOV MAC ; MEMORY MOVE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MOVB MAC ; MEMORY MOVE
STY SCRATCH ; ++<3C2B> BACKUP .Y
_MLIT ]1;WPAR1 ; ++<[16C12B]> CHECK 1ST ADDR AS LITERAL
_MLIT ]2;WPAR2 ; ++<[16C12B]> CHECK 2ND ADDR AS LITERAL
_MLIT ]3;WPAR3 ; ++<[16C12B]> CHECK 3RD AS LITERAL
JSR MEMMOVE ; ++<6C3B[207C+]> GOSUB ROUTINE
LDY SCRATCH ; ++<3C2B> RESTORE .Y
STY SCRATCH ; {3C2B} BACKUP .Y
_MLIT ]1;WPAR1 ; {16C12B} CHECK 1ST ADDR AS LITERAL
_MLIT ]2;WPAR2 ; {16C12B} CHECK 2ND ADDR AS LITERAL
_MLIT ]3;WPAR3 ; {16C12B} CHECK 3RD AS LITERAL
JSR MEMMOVE ; {213C3B} GOSUB ROUTINE {NZCV}
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -797,13 +750,13 @@ MOVB MAC ; MEMORY MOVE
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MSWAP MAC ; MEMORY SWAP
STY SCRATCH ; ++<3C2B> BACKUP .Y
_MLIT ]2;WPAR2 ; ++<[16C12B]> TEST AS LITERAL
_MLIT ]1;WPAR1 ; ++<[16C12B]> TEST AS LITERAL
LDA ]3 ; ++<4C3B>
STA BPAR1 ; ++<3C2B> STORE LENGTH IN BYTES
JSR MEMSWAP ; ++<6C3B[46+]> GOSUB ROUTINE
LDY SCRATCH ; ++<3C2B> RESTORE .Y
STY SCRATCH ; {3C2B} BACKUP .Y
_MLIT ]2;WPAR2 ; {16C12B} TEST AS LITERAL
_MLIT ]1;WPAR1 ; {16C12B} TEST AS LITERAL
LDA ]3 ; {4C3B} {NZ}
STA BPAR1 ; {3C2B} STORE LENGTH IN BYTES
JSR MEMSWAP ; {6C3B46+} GOSUB ROUTINE {NZC}
LDY SCRATCH ; {3C2B} RESTORE .Y {NZ}
<<< ; END MAC
*
*``````````````````````````````*
@@ -811,12 +764,18 @@ MSWAP MAC ; MEMORY SWAP
* *
* LOAD .A WITH VALUE AT ADDR *
* *
* CYCLES: 4 *
* BYTES: 3 *
* CYCLES: 28 *
* BYTES: 18 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PEEK MAC ; PUT VALUE INTO .A
LDA ]1 ; ++<4C3B> LOAD ADDR AL IN .A
STY SCRATCH ; {3C2B}
_AXLIT ]1 ; {8C6B}
STA ADDR1 ; {3C2B}
STX ADDR1+1 ; {3C2B}
LDY #0 ; {2C2B} {ZC}
LDA (ADDR1),Y ; {6C2B} {ZC}
LDY SCRATCH ; {3C2B} {NZ}
<<< ; END MACRO
*
*``````````````````````````````*
@@ -824,11 +783,30 @@ PEEK MAC ; PUT VALUE INTO .A
* *
* STORE VALUE AT ADDRESS *
* *
* CYCLES: 4 *
* BYTES: 3 *
* CYCLES: 32 *
* BYTES: 20 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
POKE MAC ; STORE .A INTO MEM LOC
STA ]1 ; ++<4C3B> STORE MEM VAL IN .A
STY SCRATCH ; {3C2B}
_AXLIT ]2 ; {8C6B}
STA ADDR1 ; {3C2B}
STX ADDR1+1 ; {3C2B}
LDA ]1 ; {3C2B} {ZC}
LDY #0 ; {3C2B} {ZC}
STA (ADDR1),Y ; {6C2B} {ZC}
LDY SCRATCH ; {3C2B} {NZ}
<<< ; END MACRO
*
*
*``````````````````````````````*
* NEGA *
* *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
NEGA MAC ; STORE .A INTO MEM LOC
EOR #$FF
CLC
ADC #1
<<< ; END MACRO
*
@@ -1,39 +0,0 @@
JUMPTBL JMP MAIN_START
DS 32
VARTAB DS 20
RETLEN DS 1
RETURN DS 255
ADDR1 EQU $06
ADDR2 EQU $08
ADDR3 EQU $EB
ADDR4 EQU $ED
SCRATCH EQU $19
SCRATCH2 EQU $1E
RETADR EQU $FE
RESULT EQU $FA
RESULT2 EQU $FC
WPAR1 EQU $FA
WPAR2 EQU $FC
WPAR3 EQU $FE
BPAR1 EQU $EF
BPAR2 EQU $E3
BPAR3 EQU $1E
BPAR4 EQU $19
REENTRY EQU $3D0
PROMPT EQU $33
COLDENT EQU $03D3
SRESET EQU $03F2
PRNTAX EQU $F941
BELL EQU $FBE4
IOSAVE EQU $FF4A
IOREST EQU $FF3F
BITON0 EQU $01
BITON1 EQU $02
BITON2 EQU $04
BITON3 EQU $08
BITON4 EQU $10
BITON5 EQU $20
BITON6 EQU $40
BITON7 EQU $80
MAIN_START
-256
View File
@@ -1,256 +0,0 @@
]RIGHT DS 1
]LEFT DS 1
]LENGTH DS 1
]A DS 1
]X DS 1
]Y DS 1
]C DS 1
]Z DS 1
]N DS 1
]O DS 1
]HEXTAB ASC "0123456789ABCDEF"
]COUT EQU $FDF0
]KYBD EQU $C000
]STROBE EQU $C010
__DUMP
STY ]LENGTH
STA ADDR1
STX ADDR1+1
LDA #$8D
JSR ]COUT
LDA ADDR1+1
CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1+1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
CLRHI
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA ADDR1
AND #$0F
TAX
LDA ]HEXTAB,X
JSR ]COUT
LDA #":"
JSR ]COUT
LDA "#"
JSR ]COUT
LDY #0
:LP
LDA (ADDR1),Y
CLRHI ; ++<[16C10B] AT COUNTER OFFSET
STA ]LEFT
LDA (ADDR1),Y
AND #$0F
STA ]RIGHT
LDX ]LEFT
LDA ]HEXTAB,X
JSR ]COUT
LDX ]RIGHT
LDA ]HEXTAB,X
JSR ]COUT
LDA #160
JSR ]COUT
INY
CPY ]LENGTH
BNE :LP
RTS
__ERRH
LDA #1
STA $AAB6
STA $75+1
STA $33
STA ADDR1
STX ADDR1+1
LDA #$FF
STA $D8
LDY #0
LDA (ADDR1),Y
STA $9D5A
INY
LDA (ADDR1),Y
STA $9D5B
RTS
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR ]COUT
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA ; ++<3C1B> IF NEEDED
LDA ADDR1
PHA
RTS
DELAYMS
]MSCNT EQU $0CA
:DELAY
CPY #0
BEQ :EXIT
NOP
CPY #1
BNE :DELAYA
JMP :LAST1
:DELAYA
DEY
:DELAY0
LDX #]MSCNT
:DELAY1
DEX
BNE :DELAY1
NOP
NOP
DEY
BNE :DELAY0
:LAST1
LDX #]MSCNT-3
:DELAY2
DEX
BNE :DELAY2
:EXIT
RTS
]FILL EQU BPAR1
]SIZE EQU WPAR2
]ADDR EQU WPAR1
MEMFILL
LDA ]FILL
LDX ]SIZE+1
BEQ :PARTPG
LDY #0
:FULLPG
STA (]ADDR),Y
INY
BNE :FULLPG
INC ]ADDR+1
DEX
BNE :FULLPG
:PARTPG
LDX ]SIZE
BEQ :EXIT
LDY #0
:PARTLP
STA (]ADDR),Y
INY
DEX
BNE :PARTLP
:EXIT
RTS
]SIZE EQU WPAR3
]ADDR1 EQU WPAR1
]ADDR2 EQU WPAR2
MEMMOVE
LDA ]ADDR2
SEC
SBC ]ADDR1
TAX
LDA ]ADDR2+1
SBC ]ADDR1+1
TAY
TXA
CMP ]SIZE
TYA
SBC ]SIZE+1
BCS :DOLEFT
JSR :MVERHT
JMP :MREXIT
:DOLEFT
JSR :MVELEFT
:EXIT
JMP :MREXIT
:MVELEFT
LDY #0
LDX ]SIZE+1
BEQ :MLPART
:MLPAGE
LDA (]ADDR1),Y
STA (]ADDR2),Y
INY
BNE :MLPAGE
INC ]ADDR1+1
INC ]ADDR2+1
DEX
BNE :MLPAGE
:MLPART
LDX ]SIZE
BEQ :MLEXIT
:MLLAST
LDA (]ADDR1),Y
STA (]ADDR2),Y
INY
DEX
BNE :MLLAST
:MLEXIT
JMP :MREXIT
:MVERHT
LDA ]SIZE+1
CLC
ADC ]ADDR1+1
STA ]ADDR1+1
LDA ]SIZE+1
CLC
ADC ]ADDR2+1
STA ]ADDR2+1
LDY ]SIZE
BEQ :MRPAGE
:MR0
DEY
LDA (]ADDR1),Y
STA (]ADDR2),Y
CPY #0
BNE :MR0
:MRPAGE
LDX ]SIZE+1
BEQ :MREXIT
:MR1
DEC ]ADDR1+1
DEC ]ADDR2+1
:MR2
DEY
LDA (]ADDR1),Y
STA (]ADDR2),Y
CPY #0
BNE :MR2
DEX
BNE :MR1
:MREXIT
RTS
]SIZE EQU BPAR1
]ADDR1 EQU WPAR1
]ADDR2 EQU WPAR2
MEMSWAP
LDY #255
:LP
INY
LDA (]ADDR1),Y
TAX
LDA (]ADDR2),Y
STA (]ADDR1),Y
TXA
STA (]ADDR2),Y
CPY ]SIZE
BNE :LP
RTS
RTS
-117
View File
@@ -1,117 +0,0 @@
CALL MAC
JSR ]1
<<<
RET MAC
RTS
<<<
JA MAC
BCS ]ABOVE
BEQ ]EXIT
BCC ]EXIT
]ABOVE JMP ]1
]EXIT
<<<
JAE MAC
BCS ]ABEQ
JMP ]EXIT
]ABEQ JMP ]1
]EXIT
<<<
JB MAC
BCC ]BELOW
JMP ]EXIT
]BELOW JMP ]1
]EXIT <<<
JBE MAC
BEQ ]BELEQ
BCC ]BELEQ
JMP ]EXIT
]BELEQ JMP ]1
]EXIT <<<
JC MAC
JB ]1 ++<[4B8C]>
<<<
JE MAC
BEQ ]EQ
JMP ]EXIT
]EQ JMP ]1
]EXIT <<<
JG MAC
JA ]1
<<<
JGE MAC
JAE ]1
<<<
JL MAC
JB ]1
]EXIT <<<
JLE MAC
JBE ]1
<<<
JNC MAC
BCC ]CLR
JMP ]EXIT
]CLR JMP ]1
]EXIT <<<
JNE MAC
BNE ]NE
JMP ]EXIT
]NE JMP ]1
]EXIT <<<
JZ MAC
BEQ ]ZERO
JMP ]EXIT
]ZERO JMP ]1
]EXIT <<<
JNZ MAC
BNE ]NOTZ
JMP ]EXIT
]NOTZ JMP ]1
]EXIT <<<
JS MAC
BPL ]PLUS
JMP ]EXIT
]PLUS JMP ]1
]EXIT <<<
JNS MAC
BMI ]MIN
JMP ]EXIT
]MIN JMP ]1
]EXIT <<<
JO MAC
BVS ]OV
JMP ]EXIT
]OV JMP ]1
]EXIT <<<
JNO MAC
BVC ]NOV
JMP ]EXIT
]NOV JMP ]1
]EXIT <<<
ANC MAC
CLC
LDA ]1
ADC ]2
CLC
<<<
SNC MAC
SEC
LDA ]1
SBC ]2
SEC
<<<
PUSHA MAC
PHP
PHA
CPHY
CPHX
<<<
PULLA MAC
CPLX
CPLY
PLA
PLP
<<<
POPA MAC
PULLA
<<<
@@ -1,22 +0,0 @@
CALL MAC
JSR ]1
<<<
CPL MAC
EOR $FF
<<<
JP MAC
JMP ]1
<<<
LD MAC
<<<
POP MAC
PLA
<<<
RET MAC
RTS
<<<
SCF MAC
SEC
<<<
-292
View File
@@ -1,292 +0,0 @@
_AXLIT MAC
IF #=]1
LDX ]1/$100
LDA ]1
ELSE
LDX ]1+1
LDA ]1
FIN
<<<
_AXSTR MAC
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCNT2
]STRTMP STR ]1
__STRCNT2
LDX #>]STRTMP
LDA #<]STRTMP
ELSE
_AXLIT ]1
FIN
<<<
_ISLIT MAC
IF #=]1
LDA ]1/$100
PHA
LDA ]1
PHA
ELSE
LDA ]1+1
PHA
LDA ]1
PHA
FIN
<<<
_ISSTR MAC
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCONT
]STRTMP STR ]1
__STRCONT
LDA #>]STRTMP
PHA
LDA #<]STRTMP
PHA
ELSE
_ISLIT ]1
FIN
<<<
_MLIT MAC
IF #=]1
LDA ]1/$100
STA ]2+1
LDA ]1
STA ]2
ELSE
LDA ]1+1
STA ]2+1
LDA ]1
STA ]2
FIN
<<<
_MSTR MAC
IF "=]1 ;...... IF ]1 IS A STRING
JMP __STRCONT
]STRTMP STR ]1
__STRCONT
LDA #>]STRTMP
STA ]2+1
LDA #<]STRTMP
STA ]2
ELSE
_ISLIT ]1
FIN
<<<
_PRN MAC
STY SCRATCH
JSR __P
ASC ]1
HEX 00
LDY SCRATCH
<<<
_WAIT MAC
]LP LDA ]KYBD
BPL ]LP
AND #$7F
STA ]STROBE
<<<
BCCL MAC
BCC ]TOBCC
]NOBCC JMP ]EXIT
]TOBCC JMP ]1
]EXIT
<<<
BCSL MAC
BCS ]TOBCS
]NOBCS JMP ]EXIT
]TOBCS JMP ]1
]EXIT
<<<
BEEP MAC
STY SCRATCH
LDX ]1
]LP1
JSR BELL
DEX
CPX #0
BNE ]LP1
LDY SCRATCH
<<<
BEQL MAC
BEQ ]TOBEQ
]NOBEQ JMP ]EXIT
]TOBEQ JMP ]1
]EXIT
<<<
BNEL MAC
BNE ]TOBNE
]NOBNE JMP ]EXIT
]TOBNE JMP ]1
]EXIT
<<<
BMIL MAC
BMI ]TOBMI
]NOBMI JMP ]EXIT
]TOBMI JMP ]1
]EXIT
<<<
BPLL MAC
BPL ]TOBPL
]NOBPL JMP ]EXIT
]TOBPL JMP ]1
]EXIT
<<<
BVCL MAC
BVC ]TOBVC
]NOBVC JMP ]EXIT
]TOBVC JMP ]1
]EXIT
<<<
BVSL MAC
BVS ]TOBVS
]NOBVS JMP ]EXIT
]TOBVS JMP ]1
]EXIT
<<<
CBRA MAC
JMP ]1
<<<
CPHX MAC
STA SCRATCH
TXA
PHA
LDA SCRATCH
<<<
CPHY MAC
STA SCRATCH
TYA
PHA
LDA SCRATCH
<<<
CPLX MAC
STA SCRATCH
PLA
TAX
LDA SCRATCH
<<<
CPLY MAC
STA SCRATCH
PLA
TAY
LDA SCRATCH
<<<
CTXY MAC
STA SCRATCH
TXA
TAY
LDA SCRATCH
<<<
CTYX MAC
STA SCRATCH
TYA
TAX
LDA SCRATCH
<<<
CLRHI MAC
AND #$F0
LSR
LSR
LSR
LSR
<<<
DELAY MAC
STY SCRATCH
LDY ]1
JSR DELAYMS
LDY SCRATCH
<<<
DUMP MAC
_AXLIT ]1
STY SCRATCH
LDY ]2
JSR __DUMP
LDY SCRATCH
<<<
GBIT MAC
LDA ]1
AND ]2
BEQ ]ZERO
LDA #1
JMP ]EXIT
]ZERO LDA #0
]EXIT <<<
ERRH MAC
STY SCRATCH
_AXLIT
JSR __ERRH
LDY SCRATCH
<<<
GRET MAC
STY SCRATCH
_AXLIT ]1
STA ADDR1
STX ADDR1+1
LDY #255
]LP
INY
LDA RETURN,Y
STA (ADDR1),Y ; ++<6C2B> COUNTER OFFSET
CPY RETLEN
BNE ]LP
LDY SCRATCH
<<<
MFILL MAC
STY SCRATCH
_MLIT ]1;WPAR1
_MLIT ]2;WPAR2
LDA ]3
STA BPAR1
JSR MEMFILL
LDY SCRATCH
MOV MAC
IF A=]1
IF X=]2
TAX
ELSE
IF Y=]2
TAY
ELSE
STA ]2
FIN
FIN
FIN
IF $=]1
IF A=]2
LDA ]1
ELSE
IF X=]2
LDX ]1
ELSE
IF Y=]2
LDY ]1
ELSE
STY SCRATCH
LDY ]1
STY ]2
LDY SCRATCH
FIN
FIN
FIN
FIN
]EXIT <<<
MOVB MAC
STY SCRATCH
_MLIT ]1;WPAR1
_MLIT ]2;WPAR2
_MLIT ]3;WPAR3
JSR MEMMOVE
LDY SCRATCH
<<<
MSWAP MAC
STY SCRATCH
_MLIT ]2;WPAR2
_MLIT ]1;WPAR1
LDA ]3
STA BPAR1
JSR MEMSWAP
LDY SCRATCH
<<<
PEEK MAC
LDA ]1
<<<
POKE MAC
STA ]1
<<<
-3
View File
@@ -1,3 +0,0 @@
BLOAD NO.MINIFY
CALL -151
7000G
-3
View File
@@ -1,3 +0,0 @@
BLOAD MINIFY
CALL -151
7000G
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More