STDIO disk 0.3.0 update

- added error handling
- no more massive library; just a subroutine per file. This is because Merlin doesn't like large files.
- added a "minify" BASIC utility that gets rid of *most* comments in a source textfile. This dramatically reduces space used if you're not terribly interested in non-inline comments.
- TFILL,THLIN,TVLIN and TPUT not directly access the video memory (page one), making for a much faster draw without interfering COUT.
- some stylistic changes, primarily to TFILL
- change required files to minified versions only. The whole files can be found on disk 2.
- got a norovirus so pretty much couldn't do anything requiring sustained attention, so focused on small things here and not on my dayjob. Cool.
- created a required.vars file that separates variables and settings from the other required files. Not minified.
- This current bout of revision will probably be the last, once all initial 6 disks are revamped, that focuses on all subroutines/macros in a given library at a single push. After this round, commits will be done on a subroutine or related file basis.
This commit is contained in:
nathanriggs 2019-01-13 23:48:09 -05:00
parent 82348c8b8d
commit f5c097e70f
52 changed files with 8898 additions and 7785 deletions

Binary file not shown.

View File

@ -1,339 +0,0 @@
6000- A9 03 LDA #$03
6002- 48 PHA
6003- A9 00 LDA #$00
6005- 48 PHA
6006- A9 00 LDA #$00
6008- 48 PHA
6009- A9 0A LDA #$0A
600B- 48 PHA
600C- A9 00 LDA #$00
600E- 48 PHA
600F- 20 63 60 JSR $6063
6012- A9 03 LDA #$03
6014- 48 PHA
6015- A9 00 LDA #$00
6017- 48 PHA
6018- A9 03 LDA #$03
601A- 48 PHA
601B- A9 20 LDA #$20
601D- 48 PHA
601E- A9 00 LDA #$00
6020- 48 PHA
6021- A9 0A LDA #$0A
6023- 48 PHA
6024- 20 AC 60 JSR $60AC
6027- A0 FA LDY #$FA
6029- 20 4E 61 JSR $614E
602C- A0 FA LDY #$FA
602E- 20 4E 61 JSR $614E
6031- A0 FA LDY #$FA
6033- 20 4E 61 JSR $614E
6036- A0 FA LDY #$FA
6038- 20 4E 61 JSR $614E
603B- A9 01 LDA #$01
603D- 85 06 STA $06
603F- A9 02 LDA #$02
6041- 85 07 STA $07
6043- A9 03 LDA #$03
6045- 85 08 STA $08
6047- A9 04 LDA #$04
6049- 85 09 STA $09
604B- A9 6D LDA #$6D
604D- 48 PHA
604E- A9 00 LDA #$00
6050- 48 PHA
6051- 20 6B 61 JSR $616B
6054- A9 6D LDA #$6D
6056- 48 PHA
6057- A9 00 LDA #$00
6059- 48 PHA
605A- 20 E3 61 JSR $61E3
605D- 4C D0 03 JMP $03D0
6060- 4C 59 62 JMP $6259
6063- 68 PLA
6064- 8D AA 60 STA $60AA
6067- 68 PLA
6068- 8D AB 60 STA $60AB
606B- 68 PLA
606C- 8D A7 60 STA $60A7
606F- 68 PLA
6070- 8D A8 60 STA $60A8
6073- 68 PLA
6074- 8D A9 60 STA $60A9
6077- 68 PLA
6078- 85 06 STA $06
607A- 68 PLA
607B- 85 07 STA $07
607D- AD A7 60 LDA $60A7
6080- AE A9 60 LDX $60A9
6083- F0 0C BEQ $6091
6085- A0 00 LDY #$00
6087- 91 06 STA ($06),Y
6089- C8 INY
608A- D0 FB BNE $6087
608C- E6 07 INC $07
608E- CA DEX
608F- D0 F6 BNE $6087
6091- AE A8 60 LDX $60A8
6094- F0 08 BEQ $609E
6096- A0 00 LDY #$00
6098- 91 06 STA ($06),Y
609A- C8 INY
609B- CA DEX
609C- D0 FA BNE $6098
609E- AD AB 60 LDA $60AB
60A1- 48 PHA
60A2- AD AA 60 LDA $60AA
60A5- 48 PHA
60A6- 60 RTS
60A7- 00 BRK
60A8- 00 BRK
60A9- 00 BRK
60AA- 00 BRK
60AB- 00 BRK
60AC- 68 PLA
60AD- 8D 4A 61 STA $614A
60B0- 68 PLA
60B1- 8D 4B 61 STA $614B
60B4- 68 PLA
60B5- 8D 4C 61 STA $614C
60B8- 68 PLA
60B9- 8D 4D 61 STA $614D
60BC- 68 PLA
60BD- 85 08 STA $08
60BF- 68 PLA
60C0- 85 09 STA $09
60C2- 68 PLA
60C3- 85 06 STA $06
60C5- 68 PLA
60C6- 85 07 STA $07
60C8- A5 08 LDA $08
60CA- 38 SEC
60CB- E5 06 SBC $06
60CD- AA TAX
60CE- A5 09 LDA $09
60D0- E5 07 SBC $07
60D2- A8 TAY
60D3- 8A TXA
60D4- CD 4C 61 CMP $614C
60D7- 98 TYA
60D8- ED 4D 61 SBC $614D
60DB- B0 06 BCS $60E3
60DD- 20 0E 61 JSR $610E
60E0- 4C E6 60 JMP $60E6
60E3- 20 E9 60 JSR $60E9
60E6- 4C 41 61 JMP $6141
60E9- A0 00 LDY #$00
60EB- AE 4D 61 LDX $614D
60EE- F0 0E BEQ $60FE
60F0- B1 06 LDA ($06),Y
60F2- 91 08 STA ($08),Y
60F4- C8 INY
60F5- D0 F9 BNE $60F0
60F7- E6 07 INC $07
60F9- E6 09 INC $09
60FB- CA DEX
60FC- D0 F2 BNE $60F0
60FE- AE 4C 61 LDX $614C
6101- F0 08 BEQ $610B
6103- B1 06 LDA ($06),Y
6105- 91 08 STA ($08),Y
6107- C8 INY
6108- CA DEX
6109- D0 F8 BNE $6103
610B- 4C 41 61 JMP $6141
610E- AD 4D 61 LDA $614D
6111- 18 CLC
6112- 65 07 ADC $07
6114- 85 07 STA $07
6116- AD 4D 61 LDA $614D
6119- 18 CLC
611A- 65 09 ADC $09
611C- 85 09 STA $09
611E- AC 4C 61 LDY $614C
6121- F0 09 BEQ $612C
6123- 88 DEY
6124- B1 06 LDA ($06),Y
6126- 91 08 STA ($08),Y
6128- C0 00 CPY #$00
612A- D0 F7 BNE $6123
612C- AE 4D 61 LDX $614D
612F- F0 10 BEQ $6141
6131- C6 07 DEC $07
6133- C6 09 DEC $09
6135- 88 DEY
6136- B1 06 LDA ($06),Y
6138- 91 08 STA ($08),Y
613A- C0 00 CPY #$00
613C- D0 F7 BNE $6135
613E- CA DEX
613F- D0 F0 BNE $6131
6141- AD 4B 61 LDA $614B
6144- 48 PHA
6145- AD 4A 61 LDA $614A
6148- 48 PHA
6149- 60 RTS
614A- 00 BRK
614B- 00 BRK
614C- 00 BRK
614D- 00 BRK
614E- C0 00 CPY #$00
6150- F0 18 BEQ $616A
6152- EA NOP
6153- C0 01 CPY #$01
6155- D0 03 BNE $615A
6157- 4C 65 61 JMP $6165
615A- 88 DEY
615B- A2 CA LDX #$CA
615D- CA DEX
615E- D0 FD BNE $615D
6160- EA NOP
6161- EA NOP
6162- 88 DEY
6163- D0 F6 BNE $615B
6165- A2 C7 LDX #$C7
6167- CA DEX
6168- D0 FD BNE $6167
616A- 60 RTS
616B- A6 06 LDX $06
616D- A4 07 LDY $07
616F- 68 PLA
6170- 8D E1 61 STA $61E1
6173- 68 PLA
6174- 8D E2 61 STA $61E2
6177- 68 PLA
6178- 85 06 STA $06
617A- 68 PLA
617B- 85 07 STA $07
617D- 98 TYA
617E- A0 01 LDY #$01
6180- 91 06 STA ($06),Y
6182- A0 00 LDY #$00
6184- 8A TXA
6185- 91 06 STA ($06),Y
6187- A0 02 LDY #$02
6189- A5 08 LDA $08
618B- 91 06 STA ($06),Y
618D- C8 INY
618E- A5 09 LDA $09
6190- 91 06 STA ($06),Y
6192- C8 INY
6193- A5 19 LDA $19
6195- 91 06 STA ($06),Y
6197- C8 INY
6198- A5 1E LDA $1E
619A- 91 06 STA ($06),Y
619C- C8 INY
619D- A5 E3 LDA $E3
619F- 91 06 STA ($06),Y
61A1- C8 INY
61A2- A5 EB LDA $EB
61A4- 91 06 STA ($06),Y
61A6- C8 INY
61A7- A5 EC LDA $EC
61A9- 91 06 STA ($06),Y
61AB- C8 INY
61AC- A5 ED LDA $ED
61AE- 91 06 STA ($06),Y
61B0- C8 INY
61B1- A5 EE LDA $EE
61B3- 91 06 STA ($06),Y
61B5- C8 INY
61B6- A5 EF LDA $EF
61B8- 91 06 STA ($06),Y
61BA- C8 INY
61BB- A5 FA LDA $FA
61BD- 91 06 STA ($06),Y
61BF- C8 INY
61C0- A5 FB LDA $FB
61C2- 91 06 STA ($06),Y
61C4- C8 INY
61C5- A5 FC LDA $FC
61C7- 91 06 STA ($06),Y
61C9- C8 INY
61CA- A5 FD LDA $FD
61CC- 91 06 STA ($06),Y
61CE- C8 INY
61CF- A5 FE LDA $FE
61D1- 91 06 STA ($06),Y
61D3- C8 INY
61D4- A5 FF LDA $FF
61D6- 91 06 STA ($06),Y
61D8- AD E2 61 LDA $61E2
61DB- 48 PHA
61DC- AD E1 61 LDA $61E1
61DF- 48 PHA
61E0- 60 RTS
61E1- 00 BRK
61E2- 00 BRK
61E3- 68 PLA
61E4- 8D 57 62 STA $6257
61E7- 68 PLA
61E8- 8D 58 62 STA $6258
61EB- 68 PLA
61EC- 85 06 STA $06
61EE- 68 PLA
61EF- 85 07 STA $07
61F1- A0 02 LDY #$02
61F3- B1 06 LDA ($06),Y
61F5- 85 08 STA $08
61F7- C8 INY
61F8- B1 06 LDA ($06),Y
61FA- 85 09 STA $09
61FC- C8 INY
61FD- B1 06 LDA ($06),Y
61FF- 85 19 STA $19
6201- C8 INY
6202- B1 06 LDA ($06),Y
6204- 85 1E STA $1E
6206- C8 INY
6207- B1 06 LDA ($06),Y
6209- 85 E3 STA $E3
620B- C8 INY
620C- B1 06 LDA ($06),Y
620E- 85 EB STA $EB
6210- C8 INY
6211- B1 06 LDA ($06),Y
6213- 85 EC STA $EC
6215- C8 INY
6216- B1 06 LDA ($06),Y
6218- 85 ED STA $ED
621A- C8 INY
621B- B1 06 LDA ($06),Y
621D- 85 EE STA $EE
621F- C8 INY
6220- B1 06 LDA ($06),Y
6222- 85 EF STA $EF
6224- C8 INY
6225- B1 06 LDA ($06),Y
6227- 85 FA STA $FA
6229- C8 INY
622A- B1 06 LDA ($06),Y
622C- 85 FB STA $FB
622E- C8 INY
622F- B1 06 LDA ($06),Y
6231- 85 FC STA $FC
6233- C8 INY
6234- B1 06 LDA ($06),Y
6236- 85 FD STA $FD
6238- C8 INY
6239- B1 06 LDA ($06),Y
623B- 85 FE STA $FE
623D- C8 INY
623E- B1 06 LDA ($06),Y
6240- 85 FF STA $FF
6242- A0 00 LDY #$00
6244- B1 06 LDA ($06),Y
6246- AA TAX
6247- B1 07 LDA ($07),Y
6249- A8 TAY
624A- 86 06 STX $06
624C- 84 07 STY $07
624E- AD 58 62 LDA $6258
6251- 48 PHA
6252- AD 57 62 LDA $6257
6255- 48 PHA
6256- 60 RTS
6257- 00 BRK
6258- 00 BRK
6259- 60 RTS

File diff suppressed because it is too large Load Diff

View File

@ -1,338 +0,0 @@
6000- 20 58 FC JSR $FC58 F8ROM:HOME
6003- 20 BF 60 JSR $60BF
6006- D7 ???
6007- D4 ???
6008- C6 A0 DEC $A0
600A- D7 ???
600B- CF ???
600C- D2 CC CMP ($CC)
600E- C4 8D CPY $8D
6010- 00 BRK
6011- A9 18 LDA #$18
6013- 8D 00 03 STA $0300
6016- 8D 01 03 STA $0301
6019- 8D 02 03 STA $0302
601C- A9 00 LDA #$00
601E- 8D 03 03 STA $0303
6021- A9 03 LDA #$03
6023- 48 PHA
6024- A9 00 LDA #$00
6026- 48 PHA
6027- 20 E0 60 JSR $60E0
602A- A9 00 LDA #$00
602C- 48 PHA
602D- A9 0F LDA #$0F
602F- 48 PHA
6030- A9 0A LDA #$0A
6032- 48 PHA
6033- A9 18 LDA #$18
6035- 48 PHA
6036- 20 05 61 JSR $6105
6039- A9 00 LDA #$00
603B- 48 PHA
603C- A9 0F LDA #$0F
603E- 48 PHA
603F- A9 0A LDA #$0A
6041- 48 PHA
6042- A9 18 LDA #$18
6044- 48 PHA
6045- 20 48 61 JSR $6148
6048- A9 0A LDA #$0A
604A- 48 PHA
604B- A9 1E LDA #$1E
604D- 48 PHA
604E- A9 05 LDA #$05
6050- 48 PHA
6051- A9 0F LDA #$0F
6053- 48 PHA
6054- A9 1A LDA #$1A
6056- 48 PHA
6057- 20 C4 61 JSR $61C4
605A- A9 03 LDA #$03
605C- 48 PHA
605D- A9 00 LDA #$00
605F- 48 PHA
6060- 20 13 62 JSR $6213
6063- 20 58 FC JSR $FC58 F8ROM:HOME
6066- 20 BF 60 JSR $60BF
6069- D7 ???
606A- D4 ???
606B- C6 AC DEC $AC
606D- A0 D7 LDY #$D7
606F- CF ???
6070- D2 CC CMP ($CC)
6072- C4 BF CPY $BF
6074- 00 BRK
6075- A2 0A LDX #$0A
6077- A0 0A LDY #$0A
6079- 86 24 STX $24
607B- 84 25 STY $25
607D- 20 22 FC JSR $FC22 F8ROM:VTAB
6080- A9 05 LDA #$05
6082- 48 PHA
6083- A9 14 LDA #$14
6085- 48 PHA
6086- A9 1E LDA #$1E
6088- 48 PHA
6089- A9 18 LDA #$18
608B- 48 PHA
608C- 20 48 61 JSR $6148
608F- A9 05 LDA #$05
6091- 48 PHA
6092- A9 1E LDA #$1E
6094- 48 PHA
6095- A9 14 LDA #$14
6097- 48 PHA
6098- A9 1A LDA #$1A
609A- 48 PHA
609B- 20 05 61 JSR $6105
609E- A9 03 LDA #$03
60A0- 48 PHA
60A1- A9 00 LDA #$00
60A3- 48 PHA
60A4- 20 13 62 JSR $6213
60A7- A9 00 LDA #$00
60A9- 48 PHA
60AA- A9 27 LDA #$27
60AC- 48 PHA
60AD- A9 00 LDA #$00
60AF- 48 PHA
60B0- A9 15 LDA #$15
60B2- 48 PHA
60B3- A9 19 LDA #$19
60B5- 48 PHA
60B6- 20 C4 61 JSR $61C4
60B9- 4C D0 03 JMP $03D0
60BC- 4C 75 62 JMP $6275
60BF- 68 PLA
60C0- 85 06 STA $06
60C2- 68 PLA
60C3- 85 07 STA $07
60C5- A0 01 LDY #$01
60C7- B1 06 LDA ($06),Y
60C9- F0 06 BEQ $60D1
60CB- 20 F0 FD JSR $FDF0 F8ROM:COUT1
60CE- C8 INY
60CF- D0 F6 BNE $60C7
60D1- 18 CLC
60D2- 98 TYA
60D3- 65 06 ADC $06
60D5- 85 06 STA $06
60D7- A5 07 LDA $07
60D9- 69 00 ADC #$00
60DB- 48 PHA
60DC- A5 06 LDA $06
60DE- 48 PHA
60DF- 60 RTS
60E0- 68 PLA
60E1- 8D 03 61 STA $6103
60E4- 68 PLA
60E5- 8D 04 61 STA $6104
60E8- 68 PLA
60E9- 85 06 STA $06
60EB- 68 PLA
60EC- 85 07 STA $07
60EE- A0 00 LDY #$00
60F0- B1 06 LDA ($06),Y
60F2- F0 06 BEQ $60FA
60F4- 20 F0 FD JSR $FDF0 F8ROM:COUT1
60F7- C8 INY
60F8- D0 F6 BNE $60F0
60FA- AD 04 61 LDA $6104
60FD- 48 PHA
60FE- AD 03 61 LDA $6103
6101- 48 PHA
6102- 60 RTS
6103- 00 BRK
6104- 00 BRK
6105- 68 PLA
6106- 8D 46 61 STA $6146
6109- 68 PLA
610A- 8D 47 61 STA $6147
610D- 68 PLA
610E- 8D 45 61 STA $6145
6111- 68 PLA
6112- 8D 44 61 STA $6144
6115- 68 PLA
6116- 8D 43 61 STA $6143
6119- 68 PLA
611A- 8D 42 61 STA $6142
611D- AE 42 61 LDX $6142
6120- 86 24 STX $24
6122- AC 44 61 LDY $6144
6125- 84 25 STY $25
6127- 20 22 FC JSR $FC22 F8ROM:VTAB
612A- AD 45 61 LDA $6145
612D- AC 42 61 LDY $6142
6130- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6133- C8 INY
6134- CC 43 61 CPY $6143
6137- D0 F7 BNE $6130
6139- AD 47 61 LDA $6147
613C- 48 PHA
613D- AD 46 61 LDA $6146
6140- 48 PHA
6141- 60 RTS
6142- 00 BRK
6143- 00 BRK
6144- 00 BRK
6145- 00 BRK
6146- 00 BRK
6147- 00 BRK
6148- 68 PLA
6149- 8D 8C 61 STA $618C
614C- 68 PLA
614D- 8D 8D 61 STA $618D
6150- 68 PLA
6151- 8D 91 61 STA $6191
6154- 68 PLA
6155- 8D 8E 61 STA $618E
6158- 68 PLA
6159- 8D 90 61 STA $6190
615C- 68 PLA
615D- 8D 8F 61 STA $618F
6160- AE 8E 61 LDX $618E
6163- AC 8F 61 LDY $618F
6166- 84 25 STY $25
6168- 86 24 STX $24
616A- 20 22 FC JSR $FC22 F8ROM:VTAB
616D- 20 F0 FD JSR $FDF0 F8ROM:COUT1
6170- AE 8E 61 LDX $618E
6173- 86 24 STX $24
6175- 84 25 STY $25
6177- 20 22 FC JSR $FC22 F8ROM:VTAB
617A- AD 91 61 LDA $6191
617D- C8 INY
617E- CC 90 61 CPY $6190
6181- D0 EA BNE $616D
6183- AD 8D 61 LDA $618D
6186- 48 PHA
6187- AD 8C 61 LDA $618C
618A- 48 PHA
618B- 60 RTS
618C- 00 BRK
618D- 00 BRK
618E- 00 BRK
618F- 00 BRK
6190- 00 BRK
6191- 00 BRK
6192- 18 CLC
6193- 65 24 ADC $24
6195- 85 24 STA $24
6197- 20 22 FC JSR $FC22 F8ROM:VTAB
619A- 60 RTS
619B- 38 SEC
619C- 8D AA 61 STA $61AA
619F- A5 24 LDA $24
61A1- ED AA 61 SBC $61AA
61A4- 85 24 STA $24
61A6- 20 22 FC JSR $FC22 F8ROM:VTAB
61A9- 60 RTS
61AA- 00 BRK
61AB- 18 CLC
61AC- 65 25 ADC $25
61AE- 85 25 STA $25
61B0- 20 22 FC JSR $FC22 F8ROM:VTAB
61B3- 60 RTS
61B4- 38 SEC
61B5- 8D C3 61 STA $61C3
61B8- A5 25 LDA $25
61BA- ED C3 61 SBC $61C3
61BD- 85 25 STA $25
61BF- 20 22 FC JSR $FC22 F8ROM:VTAB
61C2- 60 RTS
61C3- 00 BRK
61C4- 68 PLA
61C5- 8D 11 62 STA $6211
61C8- 68 PLA
61C9- 8D 12 62 STA $6212
61CC- 68 PLA
61CD- 8D 10 62 STA $6210
61D0- 68 PLA
61D1- 8D 0E 62 STA $620E
61D4- 68 PLA
61D5- 8D 0F 62 STA $620F
61D8- 68 PLA
61D9- 8D 0D 62 STA $620D
61DC- 68 PLA
61DD- 8D 0C 62 STA $620C
61E0- AC 0F 62 LDY $620F
61E3- 84 25 STY $25
61E5- 20 22 FC JSR $FC22 F8ROM:VTAB
61E8- AE 0C 62 LDX $620C
61EB- CA DEX
61EC- E8 INX
61ED- 86 24 STX $24
61EF- 20 22 FC JSR $FC22 F8ROM:VTAB
61F2- AD 10 62 LDA $6210
61F5- 20 F0 FD JSR $FDF0 F8ROM:COUT1
61F8- EC 0D 62 CPX $620D
61FB- D0 EF BNE $61EC
61FD- C8 INY
61FE- CC 0E 62 CPY $620E
6201- D0 E0 BNE $61E3
6203- AD 12 62 LDA $6212
6206- 48 PHA
6207- AD 11 62 LDA $6211
620A- 48 PHA
620B- 60 RTS
620C- 00 BRK
620D- 00 BRK
620E- 00 BRK
620F- 00 BRK
6210- 00 BRK
6211- 00 BRK
6212- 00 BRK
6213- 68 PLA
6214- 8D 49 62 STA $6249
6217- 68 PLA
6218- 8D 4A 62 STA $624A
621B- 68 PLA
621C- 85 06 STA $06
621E- 68 PLA
621F- 85 07 STA $07
6221- A2 00 LDX #$00
6223- 20 6F FD JSR $FD6F F8ROM:GETLN1
6226- 8E 48 62 STX $6248
6229- E0 00 CPX #$00
622B- F0 12 BEQ $623F
622D- A0 00 LDY #$00
622F- AD 48 62 LDA $6248
6232- 91 06 STA ($06),Y
6234- B9 00 02 LDA $0200,Y
6237- C8 INY
6238- 91 06 STA ($06),Y
623A- CC 48 62 CPY $6248
623D- D0 F5 BNE $6234
623F- AD 4A 62 LDA $624A
6242- 48 PHA
6243- AD 49 62 LDA $6249
6246- 48 PHA
6247- 60 RTS
6248- 00 BRK
6249- 00 BRK
624A- 00 BRK
624B- 68 PLA
624C- 8D 73 62 STA $6273
624F- 68 PLA
6250- 8D 74 62 STA $6274
6253- 68 PLA
6254- 85 06 STA $06
6256- 68 PLA
6257- 85 07 STA $07
6259- A0 00 LDY #$00
625B- B1 06 LDA ($06),Y
625D- 30 03 BMI $6262
625F- 4C 67 62 JMP $6267
6262- A0 01 LDY #$01
6264- 4C 69 62 JMP $6269
6267- A0 00 LDY #$00
6269- AD 74 62 LDA $6274
626C- 48 PHA
626D- AD 73 62 LDA $6273
6270- 48 PHA
6271- 98 TYA
6272- 60 RTS
6273- 00 BRK
6274- 00 BRK
6275- 60 RTS

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +0,0 @@
*``````````````````````````````*
* DELAYMS :: DELAY X MILLISECS *
*- -*
* DELAYS FOR X NUMBER OF *
* MILLISECONDS BY LOOPING *
* THROUGH PRECISELY CALCULATED *
* NUMBER OF CYCLES. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: -XY- *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDY #250 ;1/4 SEC *
* JSR DELAYMS *
*- -*
* ENTRY *
* *
* Y = NUMBER OF MILLISECONDS *
*- -*
* EXIT *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = UNCHANGED *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DELAYMS
*
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
; SPECIFIC TO 1.23 MHZ
; SPEED OF APPLE II
:DELAY
CPY #0 ; 2 CYCLES
BEQ :EXIT ; 2C (EXIT IF DEL=0)
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
*
** IF DELAY IS 1MS THEN GOTO LAST1
** THIS LOGIC IS DESIGNED TO BE
** 5 CYCLES THROUGH EITHER ATH
*
CPY #1 ; 2 CYCLES
BNE :DELAYA ; 3C IF TAKEN, ELSE 2C
JMP :LAST1 ; 3C
*
** DELAY 1 MILLISENCOND TIMES (Y-1)
*
:DELAYA
DEY ; 2C (PREDEC Y)
:DELAY0
LDX #MSCNT ; 2C
:DELAY1
DEX ; 2C
BNE :DELAY1 ; 3C
NOP ; 2C
NOP ; 2C
DEY ; 2C
BNE :DELAY0 ; 3C
:LAST1
*
** DELAY THE LAST TIME 25 CYCLES
** LESS TO TAKE THE CALL, RETURN,
** AND ROUTINE OVERHEAD INTO
** ACCOUNT.
*
LDX #MSCNT-3 ; 2C
:DELAY2
DEX ; 2C
BNE :DELAY2 ; 3C
:EXIT
RTS ; 6C
*

View File

@ -1,168 +0,0 @@
*
********************************
* *
* -< COMMON DEMO )- *
* *
* VERSION 00.00.01 *
* *
* 03/04/1980 *
* *
********************************
* *
* NATHAN D. RIGGS *
* NATHAN.RIGGS@OUTLOOK.COM *
* *
********************************
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP ONLY
DSK COMMON.DEMO
*
*``````````````````````````````*
* TOP INCLUDES (PUTS, MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT DECS
USE COMMON.MAC
*
PUT COMMON.HOOKS
*
ORG $6000
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*
*
** BIG LUMPS -- HIGH LEVEL CODE
*
*
** MEMFILL DOES ABOUT WHAT ITS NAME
** IMPLIES: IT FILLS A BLOCK OF MEMORY
** WITH A PARTICULAR CHARACTER. TO SEE
** THIS IN ACTION, HEAD OVER TO THE
** MONITOR BEFORE AND AFTER THIS RUNS
** AND TYPE 300L.
*
** THE SAME AS BELOW CAN BE ACCOMPLISHED
** WITH THE FOLLOWING MACRO:
*
** _MFIL $300;#10;#0
*
LDA #>$300 ; AREA TO FILL; HIGH
PHA
LDA #<$300 ; LOW
PHA
LDA #>10
PHA
LDA #<10
PHA
LDA #0 ; FILL CHARACTER
PHA
JSR MEMFILL
*
** MEMMOVE ALSO DOES WHAT IT SAYS: IT MOVES
** A BLOCK OF MEMORY FROM A SOURCE LOCATION
** TO A DESTINATION LOCATION. WE'LL NOW MOVE
** THOSE ZEROES PLACED BY MEMFILL TO ANOTHER
** LOCATION. AGAIN, YOU'LL ONLY SEE THIS
** CHANGE VIA THE MONITOR (CALL-151).
*
*
** THIS CAN ALSO BE DONE WITH THE MACRO:
*
** _MMOV $300;$320;#10
*
LDA #>$300 ; SRC HIGH
PHA
LDA #<$300 ; SRC LOW
PHA
LDA #>$320 ; DEST HIGH
PHA
LDA #<$320 ; DEST LOW
PHA
LDA #>10 ; # OF BYTES TO MOVE
PHA
LDA #<10 ; LOW BYTE
PHA
JSR MEMMOVE
*
** DELAYMS RUNS THROUGH CYCLES OF THE
** 6502 UNTIL A CERTAIN AMOUNT OF TIME
** HAS PASSED.
*
** IN MACRO FORM:
*
** _DLAY #250
** _DLAY #250
** _DLAY #250
** _DLAY #250
*
LDY #250 ; TIME IN MILLISECONDS
; IS PASSED VIA Y
; 250 = 1/4 SECOND
JSR DELAYMS
LDY #250
JSR DELAYMS
LDY #250
JSR DELAYMS
LDY #250
JSR DELAYMS ; = 1 SECOND DELAY
*
** ZSAVE BACKS UP THE "FREE" AREAS OF
** THE ZERO PAGE TO AN ALTERNATE MEMORY
** LOCATION. THIS IS MOSTLY USEFUL WHEN
** YOU KNOW A ROUTINE USES THE ZERO PAGE,
** BUT YOU WANT TO KEEP THE VALUES CURRENTLY
** STORED THERE AFTER CALLING THE ROUTINE.
*
** IN MACRO FORM:
*
** _ZSV $6D00
*
LDA #01
STA $06
LDA #02
STA $07
LDA #03
STA $08
LDA #04
STA $09
LDA #>$6D00
PHA
LDA #<$6D00 ; LOW DEST
PHA
JSR ZSAVE
*
** YOU CAN RESTORE THE ZERO PAGE TO ITS
** PRIOR STATE BY THEN CALLING ZLOAD.
*
** MACRO:
*
** _ZLD $6D00
*
LDA #>$6D00 ; HIGH; SOURCE
PHA
LDA #<$6D00 ; LOW
PHA
JSR ZLOAD
*
*
** LITTLE LUMPS -- MID/LOW LEVEL
*
*
JMP REENTRY
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*
** BOTTOM INCLUDES
*
PUT COMMON.LIB
*
*

View File

@ -1,14 +0,0 @@
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
* *
* COMMON.LIB HOOKS *
* *
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*
*
PROMPT EQU $33
COLDENT EQU $03D3 ; COLD ENTRY TO DOS
SRESET EQU $03F2 ; SOFT RESET
PRNTAX EQU $F941 ; PRINT HEX VALS OF A,X REGISTERS
BELL EQU $FBE4 ; RING MY BELL
IOSAVE EQU $FF4A ; SAVE CURRENT STATE OF REGISTERS
IOREST EQU $FF3F ; RESTORE OLD STATE OF REGISTERS
*

View File

@ -1,780 +0,0 @@
JMP COMMONX
*
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
* *
* COMMON.LIB *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* VERSION: 0.1.2 *
* DATE: 30-OCT-2018 *
* ASSEMBLER: MERLIN 8 PRO *
* *
* LICENSE: APACHE 2.0 LICENSE *
* WHEN APPLICABLE. CODE *
* INSPIRED BY THE WORKS OF *
* OTHERS MAY FALL UNDER A *
* DIFFERENT LICENSE. *
* *
* COMMON ASM ROUTINES *
* LIBRARY FOR FUNCTIONS SUCH *
* AS MEMORY SWAPPING. *
* *
*------------------------------*
* *
* LIST OF ROUTINES *
* *
* MEMFILL : FILL LOCATION WITH *
* A SINGLE VALUE. *
* *
* MEMMOVE : MOVE A BLOCK OF *
* MEMORY FROM ONE *
* LOC TO ANOTHER. *
* *
* DELAYMS : DELAY FOR A NUMBER *
* OF MILLISECONDS. *
* THIS DEPENDS ON *
* THE ACTUAL SYSTEM *
* BEING USED, SO *
* ISN'T AS EASILY *
* PORTED TO OTHER *
* 6502 SIBLINGS. *
* *
* ZSAVE : SAVE STATE OF FREE *
* ZERO PAGE LOCATIONS *
* AT MEM LOC SPECIFIED *
* *
* ZLOAD : LOAD PREVIOUS SAVED *
* ZERO PAGE VALUES *
* BACK INTO PROPER *
* LOCATION. *
* *
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
*
*``````````````````````````````*
* MEMFILL :: FILL MEMORY LOC *
*- -*
* FILLS A BLOCK OF MEMORY WITH *
* THE SPECIFIED VALUE; USED *
* OFTEN TO CLEAR LARGE BLOCKS. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* LDA #>1024 *
* PHA *
* LDA #<1024 *
* PHA *
* LDA #0 *
* PHA *
* JSR MEMFILL *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL VALUE FOR MEMORY *
* ARRAY SIZE *
* LOW BYTE OF STARTING POINT *
* HIGH BYTE OF STARTING POINT *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = LOW BYTE OF RET ADDR *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MEMFILL
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :VALUE
PLA
STA :ARYSZ
PLA
STA :ARYSZ+1
PLA
STA ADDR1 ; ZERO PAGE POINTER
PLA ; DEFINED IN
STA ADDR1+1 ; DECS
*
** FILL WHOLE PAGES FIRST
*
LDA :VALUE ; GET VAL FOR FILL
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
LDY #0
:FULLPG
STA (ADDR1),Y
INY ; INC TO NEXT BYTE
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
DEX
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
*
** DO THE REMAINING PARTIAL PAGE
** REGISTER A STILL CONTAINS VALUE
*
:PARTPG
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
LDY #0
:PARTLP
STA (ADDR1),Y ; STORE VAL
INY ; INCREMENT INDEX
DEX ; DECREMENT COUNTER
BNE :PARTLP ; BRANCH IF NOT DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:VALUE DS 1 ; FILL VALUE
:ARYSZ DS 2 ; ARRAY SIZE
:RETADR DS 2
*
*``````````````````````````````*
* MEMMOVE :: MOVE MEM BLOCK *
*- -*
* MOVES A SPECIFIED BLOCK OF *
* MEMORY FROM A SOURCE ADDRESS *
* TO A DESTINATION ADDRESS *
* RANGE. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* LDA #>$7000 ; DEST *
* PHA *
* LDA #<$7000 *
* PHA *
* LDA #>1024 *
* PHA *
* LDA #<1024 *
* PHA *
* JSR MEMMOVE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* NUMBER OF BYTES TO MOVE *
* LOW BYTE OF DESTINATION *
* HIGH BYTE OF DESTINATION *
* LOW BYTE OF SOURCE ADDRESS *
* HIGH BYTE OF SOURCE ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = LOW BYTE OF RET ADDR *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MEMMOVE
*
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :MVELEN
PLA
STA :MVELEN+1
PLA
STA ADDR2 ; ZERO PAGE POINTER
PLA
STA ADDR2+1
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** DETERMINE IF DEST AREA IS
** ABOVE SRC AREA BUT OVERLAPS
** IT. REMEMBER, OVERLAP CAN BE
** MOD 64K. OVERLAP OCCURS IF
** STARTING DEST ADDRESS MINUS
** STARTING SRC ADDRESS (MOD
** 64K) IS LESS THAN NUMBER
** OF BYTES TO MOVE.
*
LDA ADDR2 ;CALC DEST-SRC
SEC
SBC ADDR1
TAX
LDA ADDR2+1
SBC ADDR1+1 ; MOD 64K AUTOMATIC
; -- DISCARD CARRY
TAY
TXA ; CMP WITH # OF BYTES TO MOVE
CMP :MVELEN
TYA
SBC :MVELEN+1
BCS :DOLEFT ; BRANCH IF NO OVERLAP
*
** DEST AREA IS ABOVE SRC AREA
** BUT OVERLAPS IT.
** MOVE FROM HIGHEST ADDR TO
** AVOID DESTROYING DATA
*
JSR :MVERHT
JMP :EXIT
*
** NO PROB DOING ORDINARY MOVE
** STARTING AT LOWEST ADDR
*
:DOLEFT
JSR :MVELEFT
:EXIT
JMP :MREXIT
*
********************************
* SUBROUTINE: MVELEFT *
********************************
*
:MVELEFT
LDY #0 ; ZERO INDEX
LDX :MVELEN+1 ; X=# OF FULL PP TO MOVE
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
:MLPAGE
LDA (ADDR1),Y
STA (ADDR2),Y ;MOVE ONE BYTE
INY ; NEXT BYTE
BNE :MLPAGE ; CONT UNTIL 256B MOVED
INC ADDR1+1 ; ADV TO NEXT SRC PAGE
INC ADDR2+1 ; ADV NEXT DEST PAGE
DEX ; DEC PAGE COUNT
BNE :MLPAGE ; CONT UNTIL ALL FULL
; PAGES ARE MOVED
:MLPART
LDX :MVELEN ; GET LENGTH OF LAST PAGE
BEQ :MLEXIT ; BR IF LENGTH OF LAST
; PAGE = 0
; REG Y IS 0
:MLLAST
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
INY ; NEXT BYTE
DEX ; DEC COUNTER
BNE :MLLAST ; CONT UNTIL LAST P DONE
:MLEXIT
JMP :MREXIT
*
********************************
* SUBROUTINE: MVERHT *
********************************
*
:MVERHT
*
** MOVE THE PARTIAL PAGE FIRST
*
LDA :MVELEN+1
CLC
ADC ADDR1+1
STA ADDR1+1 ;POINT TO LAST P OF SRC
LDA :MVELEN+1
CLC
ADC ADDR2+1
STA ADDR2+1 ; POINT TO LAST P OF DEST
*
** MOVE THE LAST PARTIAL PAGE FIRST
*
LDY :MVELEN ;GET LENGTH OF LAST PAGE
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
:MR0
DEY ; BACK UP Y TO NEXT BYTE
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
CPY #0
BNE :MR0 ; BR IF NOT DONE W LAST P
:MRPAGE
LDX :MVELEN+1 ; GET BYTE OF COUNT AS P CT
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
:MR1
DEC ADDR1+1 ; BACK UP TO PREV SRC PAGE
DEC ADDR2+1 ; AND DEST
:MR2
DEY ; BACK UP Y TO NEXT BYTE
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
CPY #0
BNE :MR2 ; BR IF NOT DONE W THIS PAGE
DEX
BNE :MR1 BR IF NOT ALL PAGES MOVED
:MREXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:RETADR DS 2
:MVELEN DS 2
*
*``````````````````````````````*
* DELAYMS :: DELAY X MILLISECS *
*- -*
* DELAYS FOR X NUMBER OF *
* MILLISECONDS BY LOOPING *
* THROUGH PRECISELY CALCULATED *
* NUMBER OF CYCLES. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: -XY- *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDY #250 ;1/4 SEC *
* JSR DELAYMS *
*- -*
* ENTRY *
* *
* Y = NUMBER OF MILLISECONDS *
*- -*
* EXIT *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = UNCHANGED *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DELAYMS
*
MSCNT EQU $0CA ; 202 TIMES THROUGH DELAY1
; SPECIFIC TO 1.23 MHZ
; SPEED OF APPLE II
:DELAY
CPY #0 ; 2 CYCLES
BEQ :EXIT ; 2C (EXIT IF DEL=0)
NOP ; 2 CYCLES (MAKE OVERHEAD=25C)
*
** IF DELAY IS 1MS THEN GOTO LAST1
** THIS LOGIC IS DESIGNED TO BE
** 5 CYCLES THROUGH EITHER ATH
*
CPY #1 ; 2 CYCLES
BNE :DELAYA ; 3C IF TAKEN, ELSE 2C
JMP :LAST1 ; 3C
*
** DELAY 1 MILLISENCOND TIMES (Y-1)
*
:DELAYA
DEY ; 2C (PREDEC Y)
:DELAY0
LDX #MSCNT ; 2C
:DELAY1
DEX ; 2C
BNE :DELAY1 ; 3C
NOP ; 2C
NOP ; 2C
DEY ; 2C
BNE :DELAY0 ; 3C
:LAST1
*
** DELAY THE LAST TIME 25 CYCLES
** LESS TO TAKE THE CALL, RETURN,
** AND ROUTINE OVERHEAD INTO
** ACCOUNT.
*
LDX #MSCNT-3 ; 2C
:DELAY2
DEX ; 2C
BNE :DELAY2 ; 3C
:EXIT
RTS ; 6C
*
*
*``````````````````````````````*
* ZSAVE :: SAVE 0-PAGE FREE *
*- -*
* STORES THE VALUES IN THE *
* LITTLE FREE SPACE ON THE *
* ZERO PAGE AT AN ALTERNATE *
* MEMORY LOCATION TO BE *
* RETRIEVED AND RESTORED AT A *
* LATER POINT. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* JSR ZSAVE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF DESTINATION *
* HIGH BYTE OF DESTINATION *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = TRASH *
* X = TRASH *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ZSAVE
*
** LOAD ADDR1 ZERO PAGE AREA FIRST,
** SINCE WE'LL BE USING THAT
*
** NOTE THAT THIS SHOULD ALWAYS BE
** $06 AND $07, OR ELSE CODE WILL
** HAVE TO CHANGE.
*
LDX ADDR1
LDY ADDR1+1
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** COPY ZERO PAGE TO SPECIFIED
** NON-ZERO LOCATION (ONLY THE
** FREE ONES..)
*
TYA ; STORE ADDR1 VALS
LDY #1 ; FIRST
STA (ADDR1),Y
LDY #0
TXA
STA (ADDR1),Y
LDY #2
LDA $08
STA (ADDR1),Y
INY
LDA $09
STA (ADDR1),Y
INY
LDA $19
STA (ADDR1),Y
INY
LDA $1E
STA (ADDR1),Y
INY
LDA $E3
STA (ADDR1),Y
INY
LDA $EB
STA (ADDR1),Y
INY
LDA $EC
STA (ADDR1),Y
INY
LDA $ED
STA (ADDR1),Y
INY
LDA $EE
STA (ADDR1),Y
INY
LDA $EF
STA (ADDR1),Y
INY
LDA $FA
STA (ADDR1),Y
INY
LDA $FB
STA (ADDR1),Y
INY
LDA $FC
STA (ADDR1),Y
INY
LDA $FD
STA (ADDR1),Y
INY
LDA $FE
STA (ADDR1),Y
INY
LDA $FF
STA (ADDR1),Y
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
*
*``````````````````````````````*
* ZLOAD :: RESTORE 0-PAGE FREE *
*- -*
* RESTORES PREVIOUSLY SAVED *
* ZERO PAGE VALUES FROM *
* HIGHER MEMORY LOCATION. *
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* JSR ZLOAD *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF SOURCE *
* HIGH BYTE OF SOURCE *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ZLOAD
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** COPY ZERO PAGE TO SPECIFIED
** NON-ZERO LOCATION (ONLY THE
** FREE ONES..)
*
LDY #2 ; START 2 AHEAD
LDA (ADDR1),Y ; AND PUT ADDR1
STA $08 ; AREA LAST
INY
LDA (ADDR1),Y
STA $09
INY
LDA (ADDR1),Y
STA $19
INY
LDA (ADDR1),Y
STA $1E
INY
LDA (ADDR1),Y
STA $E3
INY
LDA (ADDR1),Y
STA $EB
INY
LDA (ADDR1),Y
STA $EC
INY
LDA (ADDR1),Y
STA $ED
INY
LDA (ADDR1),Y
STA $EE
INY
LDA (ADDR1),Y
STA $EF
INY
LDA (ADDR1),Y
STA $FA
INY
LDA (ADDR1),Y
STA $FB
INY
LDA (ADDR1),Y
STA $FC
INY
LDA (ADDR1),Y
STA $FD
INY
LDA (ADDR1),Y
STA $FE
INY
LDA (ADDR1),Y
STA $FF
*
** NOW GET ZERO PAGE VALUES
** FOR SPACE OCCUPIED BY ADDR; RETURN IN X,Y
*
LDY #0
LDA (ADDR1),Y
TAX
LDA (ADDR1+1),Y
TAY
STX ADDR1
STY ADDR1+1
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
*
*
COMMONX RTS

View File

@ -1,180 +0,0 @@
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
* *
* COMMON.MAC *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* VERSION: 0.1.2 *
* DATE: 30-OCT-2018 *
* ASSEMBLER: MERLIN 8 PRO *
* *
* LICENSE: APACHE 2.0 LICENSE, *
* WHERE APPLICABLE. CODE *
* INSPIRED BY OR COPIED FROM *
* OTHERS MAY FALL UNDER A *
* DIFFERENT LICENSE. I WILL *
* DO MY BEST TO NOTIFY SUCH *
* CASES. *
* *
*------------------------------*
* *
* THIS IS A MACRO LIBRARY FOR *
* COMMON.LIB, AND CAN BE USED *
* REGARDLESS OF WHETHER A *
* SPECIFIC FUNCTION IS *
* INCLUDED AS A PUT IN THE *
* MAIN SOURCE. *
* *
*------------------------------*
* *
* LIST OF MACROS *
* *
* _MFIL :: FILL MEMORY BLOCK *
* _MMOV :: MOVE MEMORY BLOCK *
* _BELL :: RING MY BELL *
* _DLAY :: DELAY IN MILLISECS *
* _ZSV :: SAVE FREE ZERO PAGE *
* _ZLD :: LOAD SAVE ZERO PAGE *
* *
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
*
*``````````````````````````````*
* _MFIL :: FILL MEMORY BLOCK *
*- -*
* FILL BLOCK OF MEMORY WITH *
* SPECIFIED VALUE. *
*- -*
* PARAMETERS: *
* *
* PARAM1 = STARTING ADDRESS *
* PARAM2 = LENGTH IN BYTES *
* PARAM3 = FILL VALUE *
*- -*
* SAMPLE USAGE: *
* _MFIL $300;#256;#0 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_MFIL MAC
LDA #>]1 ; STARTING POINT
PHA
LDA #<]1
PHA
LDA #>]2 ; # OF BYTES
PHA
LDA #<]2
PHA
LDA ]3 ; FILL VALUE
PHA
JSR MEMFILL
<<<
*
*``````````````````````````````*
* _BELL :: RING BELL X TIMES -*
*- -*
* RING THE STANDARD BELL. *
*- -*
* PARAMETERS: *
* *
* PARAM1 = NUMBER OF RINGS *
*- -*
* SAMPLE USAGE: _BELL *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_BELL MAC
LUP ]1
JSR BELL
--^
<<<
*
*``````````````````````````````*
* _MMOV :: MOVE MEMORY BLOCK -*
*- -*
* MOVE A BLOCK OF MEMORY FROM *
* A SOURCE TO DESTINATION. *
*- -*
* PARAMETERS: *
* PARAM1 = SOURCE ADDRESS *
* PARAM2 = DESTINATION ADDRESS *
* PARAM3 = NUMBER OF BYTES *
*- -*
* SAMPLE USAGE: *
* *
* _MMOV $6A00;$7B00;#1024 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_MMOV MAC
LDA #>]1 ; SRC ADDR
PHA
LDA #<]1
PHA
LDA #>]2 ; DEST ADDR
PHA
LDA #<]2
PHA
LDA #>]3 ; # OF BYTES
PHA
LDA #<]3
PHA
JSR MEMMOVE
<<<
*
*``````````````````````````````*
* _DLAY :: DELAY X MILLISECS *
*- -*
* DELAY FOR PASSED MILLISECS *
*- -*
* PARAMETERS: *
* *
* PARAM1 = NUM OF MILLISECONDS *
*- -*
* SAMPLE USAGE: _DLAY #250 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_DLAY MAC
LDY ]1
JSR DELAYMS
<<<
*
*``````````````````````````````*
* _ZSV :: SAVE ZERO PAGE *
*- -*
* SAVE ZERO PAGE FREE AREAS *
* FOR LATER RESTORE. *
*- -*
* PARAMETERS: *
* *
* PARAM1 = ADDRESS TO STORE AT *
*- -*
* SAMPLE USAGE: _ZSV $300 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_ZSV MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR ZSAVE
<<<
*
*``````````````````````````````*
* _ZLD :: LOAD ZERO PAGE *
*- -*
* RESTORE PREVIOUSLY SAVED *
* FREE ZERO PAGE VALUES. *
*- -*
* PARAMETERS: *
* *
* PARAM1 = ADDR TO LOAD FROM *
*- -*
* SAMPLE USAGE: _ZLD $300 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_ZLD MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR ZLOAD
<<<

View File

@ -1,130 +0,0 @@
*``````````````````````````````*
* MEMFILL :: FILL MEMORY LOC *
*- -*
* FILLS A BLOCK OF MEMORY WITH *
* THE SPECIFIED VALUE; USED *
* OFTEN TO CLEAR LARGE BLOCKS. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* LDA #>1024 *
* PHA *
* LDA #<1024 *
* PHA *
* LDA #0 *
* PHA *
* JSR MEMFILL *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL VALUE FOR MEMORY *
* ARRAY SIZE *
* LOW BYTE OF STARTING POINT *
* HIGH BYTE OF STARTING POINT *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = LOW BYTE OF RET ADDR *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MEMFILL
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :VALUE
PLA
STA :ARYSZ
PLA
STA :ARYSZ+1
PLA
STA ADDR1 ; ZERO PAGE POINTER
PLA ; DEFINED IN
STA ADDR1+1 ; DECS
*
** FILL WHOLE PAGES FIRST
*
LDA :VALUE ; GET VAL FOR FILL
LDX :ARYSZ+1 ; X=# OF PAGES TO DO
BEQ :PARTPG ; BRANCH IF HIGHBYTE OF SZ = 0
LDY #0
:FULLPG
STA (ADDR1),Y
INY ; INC TO NEXT BYTE
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGE
INC ADDR1+1 ; ADVANCE TO NEXT PAGE
DEX
BNE :FULLPG ; BRANCH IF NOT DONE W/ PAGES
*
** DO THE REMAINING PARTIAL PAGE
** REGISTER A STILL CONTAINS VALUE
*
:PARTPG
LDX :ARYSZ ;GET # OF BYTES IN FINAL PAGE
BEQ :EXIT ; BRANCH IF LOW BYTE = 0
LDY #0
:PARTLP
STA (ADDR1),Y ; STORE VAL
INY ; INCREMENT INDEX
DEX ; DECREMENT COUNTER
BNE :PARTLP ; BRANCH IF NOT DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:VALUE DS 1 ; FILL VALUE
:ARYSZ DS 2 ; ARRAY SIZE
:RETADR DS 2

View File

@ -1,222 +0,0 @@
*``````````````````````````````*
* MEMMOVE :: MOVE MEM BLOCK *
*- -*
* MOVES A SPECIFIED BLOCK OF *
* MEMORY FROM A SOURCE ADDRESS *
* TO A DESTINATION ADDRESS *
* RANGE. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* LDA #>$7000 ; DEST *
* PHA *
* LDA #<$7000 *
* PHA *
* LDA #>1024 *
* PHA *
* LDA #<1024 *
* PHA *
* JSR MEMMOVE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* NUMBER OF BYTES TO MOVE *
* LOW BYTE OF DESTINATION *
* HIGH BYTE OF DESTINATION *
* LOW BYTE OF SOURCE ADDRESS *
* HIGH BYTE OF SOURCE ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = COUNTER; TRASH *
* X = COUNTER; TRASH *
* A = LOW BYTE OF RET ADDR *
*- -*
* ADAPTED FROM LEVANTHAL AND *
* WINTHROP'S /6502 ASSEMBLY *
* LANGUAGE ROUTINES/. *
* AS SUCH, THIS MAY NOT FALL *
* UNDER THE APACHE 2.0 LICENSE *
* AGREEMENT, SINCE THE BOOK *
* WAS WRITTEN BEFORE THE *
* LICENSE! *
* *
* THAT SAID, LEVENTHAL WROTE *
* THAT THE PURPOSE OF THE BOOK *
* WAS TO COPY THE SOURCE CODE, *
* AS REINVENTING THE WHEEL IS *
* TEDIOUS, AND HE PLACED NO *
* RESTRICTIONS ON ITS USE. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
MEMMOVE
*
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :MVELEN
PLA
STA :MVELEN+1
PLA
STA ADDR2 ; ZERO PAGE POINTER
PLA
STA ADDR2+1
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** DETERMINE IF DEST AREA IS
** ABOVE SRC AREA BUT OVERLAPS
** IT. REMEMBER, OVERLAP CAN BE
** MOD 64K. OVERLAP OCCURS IF
** STARTING DEST ADDRESS MINUS
** STARTING SRC ADDRESS (MOD
** 64K) IS LESS THAN NUMBER
** OF BYTES TO MOVE.
*
LDA ADDR2 ;CALC DEST-SRC
SEC
SBC ADDR1
TAX
LDA ADDR2+1
SBC ADDR1+1 ; MOD 64K AUTOMATIC
; -- DISCARD CARRY
TAY
TXA ; CMP WITH # OF BYTES TO MOVE
CMP :MVELEN
TYA
SBC :MVELEN+1
BCS :DOLEFT ; BRANCH IF NO OVERLAP
*
** DEST AREA IS ABOVE SRC AREA
** BUT OVERLAPS IT.
** MOVE FROM HIGHEST ADDR TO
** AVOID DESTROYING DATA
*
JSR :MVERHT
JMP :EXIT
*
** NO PROB DOING ORDINARY MOVE
** STARTING AT LOWEST ADDR
*
:DOLEFT
JSR :MVELEFT
:EXIT
JMP :MREXIT
*
********************************
* SUBROUTINE: MVELEFT *
********************************
*
:MVELEFT
LDY #0 ; ZERO INDEX
LDX :MVELEN+1 ; X=# OF FULL PP TO MOVE
BEQ :MLPART ; IF X=0, DO PARTIAL PAGE
:MLPAGE
LDA (ADDR1),Y
STA (ADDR2),Y ;MOVE ONE BYTE
INY ; NEXT BYTE
BNE :MLPAGE ; CONT UNTIL 256B MOVED
INC ADDR1+1 ; ADV TO NEXT SRC PAGE
INC ADDR2+1 ; ADV NEXT DEST PAGE
DEX ; DEC PAGE COUNT
BNE :MLPAGE ; CONT UNTIL ALL FULL
; PAGES ARE MOVED
:MLPART
LDX :MVELEN ; GET LENGTH OF LAST PAGE
BEQ :MLEXIT ; BR IF LENGTH OF LAST
; PAGE = 0
; REG Y IS 0
:MLLAST
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
INY ; NEXT BYTE
DEX ; DEC COUNTER
BNE :MLLAST ; CONT UNTIL LAST P DONE
:MLEXIT
JMP :MREXIT
*
********************************
* SUBROUTINE: MVERHT *
********************************
*
:MVERHT
*
** MOVE THE PARTIAL PAGE FIRST
*
LDA :MVELEN+1
CLC
ADC ADDR1+1
STA ADDR1+1 ;POINT TO LAST P OF SRC
LDA :MVELEN+1
CLC
ADC ADDR2+1
STA ADDR2+1 ; POINT TO LAST P OF DEST
*
** MOVE THE LAST PARTIAL PAGE FIRST
*
LDY :MVELEN ;GET LENGTH OF LAST PAGE
BEQ :MRPAGE ; IF Y=0 DO THE FULL PAGES
:MR0
DEY ; BACK UP Y TO NEXT BYTE
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
CPY #0
BNE :MR0 ; BR IF NOT DONE W LAST P
:MRPAGE
LDX :MVELEN+1 ; GET BYTE OF COUNT AS P CT
BEQ :MREXIT ; BR IF HYBYTE = 0 (NO FULL P)
:MR1
DEC ADDR1+1 ; BACK UP TO PREV SRC PAGE
DEC ADDR2+1 ; AND DEST
:MR2
DEY ; BACK UP Y TO NEXT BYTE
LDA (ADDR1),Y
STA (ADDR2),Y ; MOVE BYTE
CPY #0
BNE :MR2 ; BR IF NOT DONE W THIS PAGE
DEX
BNE :MR1 BR IF NOT ALL PAGES MOVED
:MREXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:RETADR DS 2
:MVELEN DS 2

View File

@ -1,278 +0,0 @@
*``````````````````````````````*
* ZSAVE :: SAVE 0-PAGE FREE *
*- -*
* STORES THE VALUES IN THE *
* LITTLE FREE SPACE ON THE *
* ZERO PAGE AT AN ALTERNATE *
* MEMORY LOCATION TO BE *
* RETRIEVED AND RESTORED AT A *
* LATER POINT. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* JSR ZSAVE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF DESTINATION *
* HIGH BYTE OF DESTINATION *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = TRASH *
* X = TRASH *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ZSAVE
*
** LOAD ADDR1 ZERO PAGE AREA FIRST,
** SINCE WE'LL BE USING THAT
*
** NOTE THAT THIS SHOULD ALWAYS BE
** $06 AND $07, OR ELSE CODE WILL
** HAVE TO CHANGE.
*
LDX ADDR1
LDY ADDR1+1
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** COPY ZERO PAGE TO SPECIFIED
** NON-ZERO LOCATION (ONLY THE
** FREE ONES..)
*
TYA ; STORE ADDR1 VALS
LDY #1 ; FIRST
STA (ADDR1),Y
LDY #0
TXA
STA (ADDR1),Y
LDY #2
LDA $08
STA (ADDR1),Y
INY
LDA $09
STA (ADDR1),Y
INY
LDA $19
STA (ADDR1),Y
INY
LDA $1E
STA (ADDR1),Y
INY
LDA $E3
STA (ADDR1),Y
INY
LDA $EB
STA (ADDR1),Y
INY
LDA $EC
STA (ADDR1),Y
INY
LDA $ED
STA (ADDR1),Y
INY
LDA $EE
STA (ADDR1),Y
INY
LDA $EF
STA (ADDR1),Y
INY
LDA $FA
STA (ADDR1),Y
INY
LDA $FB
STA (ADDR1),Y
INY
LDA $FC
STA (ADDR1),Y
INY
LDA $FD
STA (ADDR1),Y
INY
LDA $FE
STA (ADDR1),Y
INY
LDA $FF
STA (ADDR1),Y
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
*
*``````````````````````````````*
* ZLOAD :: RESTORE 0-PAGE FREE *
*- -*
* RESTORES PREVIOUSLY SAVED *
* ZERO PAGE VALUES FROM *
* HIGHER MEMORY LOCATION. *
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* *
* LDA #>$6A00 *
* PHA *
* LDA #<$6A00 *
* PHA *
* JSR ZLOAD *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF SOURCE *
* HIGH BYTE OF SOURCE *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
ZLOAD
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
** COPY ZERO PAGE TO SPECIFIED
** NON-ZERO LOCATION (ONLY THE
** FREE ONES..)
*
LDY #2 ; START 2 AHEAD
LDA (ADDR1),Y ; AND PUT ADDR1
STA $08 ; AREA LAST
INY
LDA (ADDR1),Y
STA $09
INY
LDA (ADDR1),Y
STA $19
INY
LDA (ADDR1),Y
STA $1E
INY
LDA (ADDR1),Y
STA $E3
INY
LDA (ADDR1),Y
STA $EB
INY
LDA (ADDR1),Y
STA $EC
INY
LDA (ADDR1),Y
STA $ED
INY
LDA (ADDR1),Y
STA $EE
INY
LDA (ADDR1),Y
STA $EF
INY
LDA (ADDR1),Y
STA $FA
INY
LDA (ADDR1),Y
STA $FB
INY
LDA (ADDR1),Y
STA $FC
INY
LDA (ADDR1),Y
STA $FD
INY
LDA (ADDR1),Y
STA $FE
INY
LDA (ADDR1),Y
STA $FF
*
** NOW GET ZERO PAGE VALUES
** FOR SPACE OCCUPIED BY ADDR; RETURN IN X,Y
*
LDY #0
LDA (ADDR1),Y
TAX
LDA (ADDR1+1),Y
TAY
STX ADDR1
STY ADDR1+1
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
*
*
COMMONX RTS

View File

@ -1,20 +0,0 @@
*``````````````````````````````*
* DECLARATIONS.PUT *
*- -*
* USED IN CONJUNCTION WITH *
* OTHER PUT FILES. DEFINES *
* BASIC DECLARATIONS USED *
* ACROSS DIFFERENT ROUTINES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
REENTRY EQU $03D0
SMALLASM EQU $300 ; STADDR FOR SMALL PROGRAMS
*
ADDR1 EQU $06
ADDR2 EQU $08
ADDR3 EQU $EB
ADDR4 EQU $ED
ADDR5 EQU $FA
ADDR6 EQU $FC
ADDR7 EQU $FE
*

View File

@ -1,89 +0,0 @@
*
*``````````````````````````````*
*CURSFOR :: MOVE CURSOR FORWD *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSFOR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSFOR
CLC
ADC CURSH
STA CURSH
JSR VTAB
RTS
*
*``````````````````````````````*
*CURSBAK :: MOVE CURSOR BACKWD *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSBAK *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSBAK
SEC
STA :SCRATCH
LDA CURSH
SBC :SCRATCH
STA CURSH
JSR VTAB
RTS
*
** DATA
*
:SCRATCH DS 1
*
*``````````````````````````````*
* CURSDN :: MOVE CURSOR DOWN *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSDN *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSDN
CLC
ADC CURSV
STA CURSV
JSR VTAB
RTS
*
*``````````````````````````````*
* CURSUP :: MOVE CURSOR UP *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSUP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSUP
SEC
STA :SCRATCH
LDA CURSV
SBC :SCRATCH
STA CURSV
JSR VTAB
RTS
*
** DATA
*
:SCRATCH DS 1
*

View File

@ -1,188 +0,0 @@
*
********************************
* *
* -< STDIO DEMO >- *
* *
* VERSION 00.00.01 *
* *
* 03/04/1980 *
* *
********************************
* *
* NATHAN D. RIGGS *
* NATHAN.RIGGS@OUTLOOK.COM *
* *
********************************
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP ONLY
DSK STDIO.DEMO
*
*``````````````````````````````*
* TOP INCLUDES (PUTS, MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT DECS
USE STDIO.MAC
*
PUT STDIO.HOOKS
PUT COMMON.HOOKS
*
ORG $6000
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*
*
** BIG LUMPS -- HIGH LEVEL CODE
*
*
JSR HOME ; CLEAR SCREEN
*
***
*** USE XPRINT TO PRINT A STRING OF CHARACTERS
*** TO THE SCREEN. THE STRING COMES AFTER
*** THE JSR STATEMENT IN AN ASC/HEX.
***
JSR XPRINT
ASC "WTF WORLD"
HEX 8D00 ; THIS TELLS THE
; ROUTINE TO STOP
; PRINTING THE STRING
*
*** USE DPRINT TO PRINT THE TEXT AT A SPECIFIC
*** MEMORY LOCATION. NOTE THAT THIS IS NOT
*** TYPICALLY USED TO PRINT STRINGS, AND LIKE
*** XPRINT USES THE NULL TERMINATOR TO ALERT
*** THE ROUTINE TO STOP PRINTING. TO PRINT
*** STRINGS, WHICH HAVE THE LENGTH OF THE STRING
*** AS THEIR FIRST BYTE VALUE, USE SPRINT.
*
*
LDA #$18 ; PUT 'XXX' INTO
STA $300 ; LOCATION $300
STA $301
STA $302
LDA #00
STA $303
LDA #>$300 ; PUSH HIBYTE
PHA
LDA #<$300 ; PUSH LOBYTE
PHA
JSR DPRINT ; NOW PRINT IT
*
* ^^^ NOTE ABOVE THAT THE HIGH BYTE
* IS PUSHED BEFORE THE LOW BYTE BECAUSE
* 6502 CONVENTION IS TO READ THE LOW BYTE
* FIRST, THEN THE HIGH BYTE. THIS IS THE
* ORDER IT WILL POP OFF THE STACK.
*
***
*** USE THLIN TO CREATE A LINE OF HORIZONTAL
*** TEXT CONSISTING OF A SINGLE CHARACTER.
*** LIKE MANY OTHER SUBROUTINES, THIS USES
*** THE STACK TO PASS VARIABLES.
***
*
LDA #0 ; START OF LINE
PHA
LDA #15 ; END OF LINE
PHA
LDA #10 ; Y POSITION
PHA
LDA #$18 ; "X" CHARACTER, INVERSE
PHA
JSR THLIN
*
*** TVLIN WORKS LIKE THLIN, BUT CREATES A VERTICAL
*** LINE INSTEAD OF A HORIZONTAL ONE.
*
LDA #0 ; STARTING Y POS OF LINE
PHA
LDA #15 ; END YPOS OF LINE
PHA
LDA #10 ; X POSITION
PHA
LDA #$18 ; "X" CHARACTER, INVERSE
PHA
JSR TVLIN
*
*
*** THE TFILLA ROUTINE ACTS LIKE A COMBINATION OF
*** THLIN AND TVLIN. IT FILLS A GIVEN RECTANGULAR
*** AREA OF THE SCREEN WITH THE DESIGNATED
*** CHARACTER AT X1,Y1:X2,Y2.
*
LDA #10 ; LEFT BOUNDARY
PHA
LDA #30 ; RIGHT BOUNDARY
PHA
LDA #5 ; TOP BOUNDARY
PHA
LDA #15 ; BOTTOM BOUNDARY
PHA
LDA #$1A ; "Z" CHARACTER
PHA
JSR TFILLA
*
*
*** THE SINPUT ROUTINE (SPECIAL INPUT) PROMPTS
*** THE USER FOR A STRING OF TEXT FOLLOWED BY
*** A <RETURN> PRESS, THEN STORES THE INPUTTED
*** STRING AT THE SPECIFIED LOCATION, WITH ITS
*** LENGTH AS THE FIRST BYTE (MAX: 255)
*
LDA #>$300 ; PUSH HIGH BYTE FIRST
PHA
LDA #<$300 ; THEN LOW BYTE, SO
; THAT THE ROUTINE
; READS LOW, HIGH
PHA
JSR SINPUT ; STORES IN $300
*
*
*** THE PADDLE BUTTON ROUTINE CHECKS
*** WHETHER THE DESIGNATED PADDLE BUTTON
*** IS CURRENTLY BEING PRESSED.
*
*
*
*
*
*
********************************
********************************
* NOW LET'S DO IT AGAIN! *
* (BUT WITH MACROS) *
********************************
********************************
*
JSR HOME
_PRN "WTF, WORLD?"
_CXY #10;#10
_TVLN #5;#20;#30;#$18
_THLN #5;#30;#20;#$1A
_INP $300
_TFIL #0;#39;#0;#21;#$19
*
*
*
** LITTLE LUMPS -- MID/LOW LEVEL
*
*
JMP REENTRY
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*
** BOTTOM INCLUDES
*
PUT STDIO.LIB
*
*

View File

@ -1,788 +0,0 @@
*
JMP STDIOX
*
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
* *
* STDIO.PUT *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* VERSION: 0.1.2 *
* DATE: 30-OCT-2018 *
* ASSEMBLER: MERLIN 8 PRO *
* *
**** SEE CHANGELOG FOR ****
**** HISTORY OF CHANGES ****
* *
* LICENSE: MIT LICENSE, WHERE *
* APPLICABLE. CODE INSPIRED *
* BY THE WORKS OF OTHERS MAY *
* FALL UNDER A DIFFERENT *
* LICENSE (NOTED IN ROUTINE). *
* *
* STANDARD INPUT / OUTPUT *
* LIBRARY. PRIMARILY FOR THE *
* APPLE II FAMILY, BUT COULD *
* BE PORTED TO OTHER 6502- *
* BASED SYSTEMS FAIRLY *
* EASILY. *
* *
*------------------------------*
* *
* LIST OF ROUTINES *
* *
* XPRINT : SPECIAL PRINT *
* DPRINT : PRINT FROM MEMORY *
* THLIN : TEXT LINE HORIZONTAL *
* TVLIN : TEXT LINE VERTICAL *
* CURSFOR : CURSOR FORWARD *
* CURSBAK : CURSOR BACKWARD *
* CURSDN : CURSOR DOWN *
* CURSUP : CURSOR UP *
* TFILLA : TEXT FILL AREA *
* SINPUT : STRING INPUT *
* GPBX : GET PADDLE BUTTON X *
* *
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
*
*``````````````````````````````*
* XPRINT :: SPECIAL PRINT *
*- -*
* PRINTS DATA IMMEDIATELY *
* FOLLOWING THE JSR TO SPRINT *
*- -*
* CLOBBERS: *
* *
* FLAGS: NZC----- REG: AYM- *
*- -*
* CYCLES: 53+ *
* SIZE: *
*- -*
* USAGE: *
* JSR SPRINT *
* ASC "HELLO, WORLD!" *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A,Y = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
*- -*
* NOTE: PARTIALLY ADOPTED FROM *
* ROGER WAGNER'S AND CHRIS *
* TORRENCE'S /ASSEMBLY LINES/ *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
XPRINT
*
** GET CURRENT EXEC ADDRESS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
LDY #$01 ; POINT TO NEXT
; INSTRUCTION
:LOOP
LDA (ADDR1),Y
BEQ :DONE
JSR COUT1
INY
BNE :LOOP
:DONE ; RESTORE STACK
CLC ; EXEC POINTER
TYA ; TO RESUME
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #$00
PHA
LDA ADDR1
PHA
RTS
:EXIT
*
*``````````````````````````````*
* DPRINT :: PRINT FROM MEMORY *
*- -*
* PRINTS DATA FROM SPECIFIED *
* MEMORY LOCATION UNTIL *
* REACHING 00 (STRING TERM). *
*- -*
* CLOBBERS: *
* *
* FLAGS: -------- REG: A-YM *
*- -*
* CYCLES: 25+ *
* SIZE: *
*- -*
* USAGE: *
* LDA #>(ADDRESS) *
* PHA *
* LDA #<(ADDRESS) *
* PHA *
* JSR DPRINT *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF PRINT ADDRESS *
* HI BYTE OF PRINT ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
* Y = LENGTH OF PRINTED *
* STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DPRINT
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET ADDRESS, STORE IN ZERO PAGE
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
LDY #$00
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
*
*
*``````````````````````````````*
* THLIN :: TEXT HORIZ LINE *
*- -*
* CREATES A HORIZONTAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT Y. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (X-START) *
* PHA *
* LDA (X-END) *
* PHA *
* LDA (Y-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR THLIN *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:X1) *
* XPOS END OF LINE (:X2) *
* YPOS OF LINE (:Y) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* X,Y = START,END OF LINE *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
THLIN
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F
PLA
STA :Y
PLA
STA :X2
PLA
STA :X1
*
*
LDX :X1 ; LOAD X START POS
STX CURSH ; STORE IN CURSH
LDY :Y ; LDY Y POS
STY CURSV ; STORE IN CURSV
JSR VTAB ; MOVE CURSOR
LDA :F ; LOAD FILL CHAR
LDY :X1 ; LOAD X START POS
:LOOP
JSR COUT1 ; PRINT FILL CHAR
INY ; INCREASE X POS
CPY :X2 ; IF LESS THAN X END POS
BNE :LOOP ; REPEAT UNTIL DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:X1 DS 1
:X2 DS 1
:Y DS 1
:F DS 1 ; FILL CHAR
:RETADR DS 2
*
*``````````````````````````````*
* TVLIN :: TEXT VERTICAL LINE *
*- -*
* CREATES A VERTICAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT X. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (Y-START) *
* PHA *
* LDA (Y-END) *
* PHA *
* LDA (X-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TVLIN *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:Y1) *
* XPOS END OF LINE (:Y2) *
* YPOS OF LINE (:X) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = END OF LINE *
* X = HORIZONTAL POSITION *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TVLIN
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F ; FILL CHAR
PLA
STA :X ; X POS
PLA
STA :Y2 ; END
PLA
STA :Y1 ; START
*
LDX :X
LDY :Y1
STY CURSV
STX CURSH
JSR VTAB ; SET CURSOR POS
:LOOP
JSR COUT1 ; PRINT CHAR
LDX :X
STX CURSH
STY CURSV
JSR VTAB ; SET NEW CURSOR POS
LDA :F ; RELOAD FILL CHAR
INY ; INCREASE COUNTER
CPY :Y2 ; IF Y1 < Y2
BNE :LOOP ; LOOP; ELSE, CONTINUE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
:X DS 1
:Y1 DS 1
:Y2 DS 1
:F DS 1
*
*
*``````````````````````````````*
*CURSFOR :: MOVE CURSOR FORWD *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSFOR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSFOR
CLC
ADC CURSH
STA CURSH
JSR VTAB
RTS
*
*``````````````````````````````*
*CURSBAK :: MOVE CURSOR BACKWD *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSBAK *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSBAK
SEC
STA :SCRATCH
LDA CURSH
SBC :SCRATCH
STA CURSH
JSR VTAB
RTS
*
** DATA
*
:SCRATCH DS 1
*
*``````````````````````````````*
* CURSDN :: MOVE CURSOR DOWN *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSDN *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSDN
CLC
ADC CURSV
STA CURSV
JSR VTAB
RTS
*
*``````````````````````````````*
* CURSUP :: MOVE CURSOR UP *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSUP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSUP
SEC
STA :SCRATCH
LDA CURSV
SBC :SCRATCH
STA CURSV
JSR VTAB
RTS
*
** DATA
*
:SCRATCH DS 1
*
*``````````````````````````````*
* TFILLA :: TEXT FILL AREA *
*- -*
* FILLS A RECTANGULAR AREA OF *
* THE SCREEN WITH THE DESIRED *
* CHARACTER. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (LEFT BOUND) *
* PHA *
* LDA (RIGHT BOUND) *
* PHA *
* LDA (TOP BOUND) *
* PHA *
* LDA (BOTTOM BOUND) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TFILLA *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL CHAR (:FILL) *
* BOTTOM BOUND (:BOTTOM) *
* TOP BOUND (:TOP) *
* RIGHT BOUND (:RIGHT) *
* LEFT BOUND (:LEFT) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = COUNTER DATA; TRASH *
* Y = COUNTER DATA; TRASH *
* STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TFILLA
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** LOAD PARAMETERS
*
PLA
STA :FILL
PLA
STA :BOTTOM
PLA
STA :TOP
PLA
STA :RIGHT
PLA
STA :LEFT
*
LDY :TOP ; LOAD STARTING Y
:LOOPY
STY CURSV
JSR VTAB ; SET VERTICAL
LDX :LEFT ; CURSOR POSITION
DEX
:LOOPX
INX
STX CURSH
JSR VTAB ; SET HORIZONTAL
LDA :FILL
JSR COUT1 ; PRINT FILL CHAR
CPX :RIGHT ; IF X < RIGHT MAX
BNE :LOOPX ; LOOP; ELSE, CONTINUE
* ; END X LOOP
INY
CPY :BOTTOM ; IF Y < BOTTOM MAX
BNE :LOOPY ; LOOP; ELSE, CONTINUE
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:LEFT DS 1
:RIGHT DS 1
:BOTTOM DS 1
:TOP DS 1
:FILL DS 1
:RETADR DS 2
*
*``````````````````````````````*
* SINPUT :: SPECIAL INPUT *
* *
* INPUTS A STRING OF TEXT VIA *
* MONITOR HOOKS. MAC 255 CHARS *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA #>(ADDRESS) *
* PHA *
* LDA #<(ADDRESS) *
* PHA *
* JSR SINPUT *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF INPUT ADDRESS *
* HI BYTE OF INPUT ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = LENGTH OF STRING *
* Y = LENGTH OF STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SINPUT
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1 ; STORE IN ZERO
PLA ; PAGE
STA ADDR1+1
*
LDX #$00
JSR GETLN
STX :STRLEN ; STORE STR LENGTH
CPX #0
BEQ :EXIT
*
:INP_CLR
LDY #0
LDA :STRLEN ; LENGTH OF STRING
STA (ADDR1),Y ; PUT LENGTH AT START OF LOC
:LOOP
LDA KEYBUFF,Y ; PUT STR INTO NEW LOC
INY
STA (ADDR1),Y
CPY :STRLEN ; IF Y < STR LENGTH
BNE :LOOP ; LOOP; ELSE, CONTINUE
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:STRLEN DS 1
:RETADR DS 2
*
*
*``````````````````````````````*
* GPBX :: GET PADDLE BUTTON X *
* *
* GETS STATE OF PADDLE BUTTON *
* SPECIFIED AND RET 0, 1 IN A *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: A-YM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA #>(ADDRESS) *
* PHA *
* LDA #<(ADDRESS) *
* PHA *
* JSR GPBX *
* *
* --- WHERE: *
* *
* BUTTON 0 = $C061 (PB0) *
* BUTTON 1 = $CO62 (PB1) *
* BUTTON 2 - $C063 (PB2) *
* BUTTON 3 = $C060 (PB3) *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF PDL BTN ADDRESS *
* HI BYTE OF PDL BTN ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = 1 IF PRESSED, 0 IF NOT *
* X = UNCHANGED *
* Y = GARBAGE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
* CHANGE THIS LATER TO ACCEPT ALL BUTTONS, 0-4
*
GBPX
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETER
*
PLA
STA ADDR1 ; ZERO PAGE
PLA
STA ADDR1+1
*
*
LDY #$00
LDA (ADDR1),Y ; IF BTN = PUSHED
BMI :1
JMP :0
:1
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
:0
LDY #$00 ; BTN NOT PUSHED;A=0
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
TYA ; BTN FLAG MOVE TO A
RTS
*
** DATA
*
:RETADR DS 2
*
STDIOX RTS

View File

@ -1,91 +0,0 @@
*
*``````````````````````````````*
* SINPUT :: SPECIAL INPUT *
* *
* INPUTS A STRING OF TEXT VIA *
* MONITOR HOOKS. MAC 255 CHARS *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA #>(ADDRESS) *
* PHA *
* LDA #<(ADDRESS) *
* PHA *
* JSR SINPUT *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF INPUT ADDRESS *
* HI BYTE OF INPUT ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = LENGTH OF STRING *
* Y = LENGTH OF STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SINPUT
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA ADDR1 ; STORE IN ZERO
PLA ; PAGE
STA ADDR1+1
*
LDX #$00
JSR GETLN
STX :STRLEN ; STORE STR LENGTH
CPX #0
BEQ :EXIT
*
:INP_CLR
LDY #0
LDA :STRLEN ; LENGTH OF STRING
STA (ADDR1),Y ; PUT LENGTH AT START OF LOC
:LOOP
LDA KEYBUFF,Y ; PUT STR INTO NEW LOC
INY
STA (ADDR1),Y
CPY :STRLEN ; IF Y < STR LENGTH
BNE :LOOP ; LOOP; ELSE, CONTINUE
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:STRLEN DS 1
:RETADR DS 2
*

View File

@ -1,114 +0,0 @@
*
*``````````````````````````````*
* TFILLA :: TEXT FILL AREA *
*- -*
* FILLS A RECTANGULAR AREA OF *
* THE SCREEN WITH THE DESIRED *
* CHARACTER. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (LEFT BOUND) *
* PHA *
* LDA (RIGHT BOUND) *
* PHA *
* LDA (TOP BOUND) *
* PHA *
* LDA (BOTTOM BOUND) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TFILLA *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL CHAR (:FILL) *
* BOTTOM BOUND (:BOTTOM) *
* TOP BOUND (:TOP) *
* RIGHT BOUND (:RIGHT) *
* LEFT BOUND (:LEFT) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = COUNTER DATA; TRASH *
* Y = COUNTER DATA; TRASH *
* STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TFILLA
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** LOAD PARAMETERS
*
PLA
STA :FILL
PLA
STA :BOTTOM
PLA
STA :TOP
PLA
STA :RIGHT
PLA
STA :LEFT
*
LDY :TOP ; LOAD STARTING Y
:LOOPY
STY CURSV
JSR VTAB ; SET VERTICAL
LDX :LEFT ; CURSOR POSITION
DEX
:LOOPX
INX
STX CURSH
JSR VTAB ; SET HORIZONTAL
LDA :FILL
JSR COUT1 ; PRINT FILL CHAR
CPX :RIGHT ; IF X < RIGHT MAX
BNE :LOOPX ; LOOP; ELSE, CONTINUE
* ; END X LOOP
INY
CPY :BOTTOM ; IF Y < BOTTOM MAX
BNE :LOOPY ; LOOP; ELSE, CONTINUE
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:LEFT DS 1
:RIGHT DS 1
:BOTTOM DS 1
:TOP DS 1
:FILL DS 1
:RETADR DS 2

View File

@ -1,98 +0,0 @@
*
*``````````````````````````````*
* THLIN :: TEXT HORIZ LINE *
*- -*
* CREATES A HORIZONTAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT Y. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (X-START) *
* PHA *
* LDA (X-END) *
* PHA *
* LDA (Y-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR THLIN *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:X1) *
* XPOS END OF LINE (:X2) *
* YPOS OF LINE (:Y) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* X,Y = START,END OF LINE *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
THLIN
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F
PLA
STA :Y
PLA
STA :X2
PLA
STA :X1
*
*
LDX :X1 ; LOAD X START POS
STX CURSH ; STORE IN CURSH
LDY :Y ; LDY Y POS
STY CURSV ; STORE IN CURSV
JSR VTAB ; MOVE CURSOR
LDA :F ; LOAD FILL CHAR
LDY :X1 ; LOAD X START POS
:LOOP
JSR COUT1 ; PRINT FILL CHAR
INY ; INCREASE X POS
CPY :X2 ; IF LESS THAN X END POS
BNE :LOOP ; REPEAT UNTIL DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
RTS
*
** DATA
*
:X1 DS 1
:X2 DS 1
:Y DS 1
:F DS 1 ; FILL CHAR
:RETADR DS 2

View File

@ -1,103 +0,0 @@
*
*``````````````````````````````*
* TVLIN :: TEXT VERTICAL LINE *
*- -*
* CREATES A VERTICAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT X. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (Y-START) *
* PHA *
* LDA (Y-END) *
* PHA *
* LDA (X-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TVLIN *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:Y1) *
* XPOS END OF LINE (:Y2) *
* YPOS OF LINE (:X) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = END OF LINE *
* X = HORIZONTAL POSITION *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TVLIN
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F ; FILL CHAR
PLA
STA :X ; X POS
PLA
STA :Y2 ; END
PLA
STA :Y1 ; START
*
LDX :X
LDY :Y1
STY CURSV
STX CURSH
JSR VTAB ; SET CURSOR POS
:LOOP
JSR COUT1 ; PRINT CHAR
LDX :X
STX CURSH
STY CURSV
JSR VTAB ; SET NEW CURSOR POS
LDA :F ; RELOAD FILL CHAR
INY ; INCREASE COUNTER
CPY :Y2 ; IF Y1 < Y2
BNE :LOOP ; LOOP; ELSE, CONTINUE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
:X DS 1
:Y1 DS 1
:Y2 DS 1
:F DS 1

View File

@ -1,70 +0,0 @@
*
*``````````````````````````````*
* XPRINT :: SPECIAL PRINT *
*- -*
* PRINTS DATA IMMEDIATELY *
* FOLLOWING THE JSR TO SPRINT *
*- -*
* CLOBBERS: *
* *
* FLAGS: NZC----- REG: AYM- *
*- -*
* CYCLES: 53+ *
* SIZE: *
*- -*
* USAGE: *
* JSR SPRINT *
* ASC "HELLO, WORLD!" *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A,Y = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
*- -*
* NOTE: PARTIALLY ADOPTED FROM *
* ROGER WAGNER'S AND CHRIS *
* TORRENCE'S /ASSEMBLY LINES/ *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
XPRINT
*
** GET CURRENT EXEC ADDRESS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
LDY #$01 ; POINT TO NEXT
; INSTRUCTION
:LOOP
LDA (ADDR1),Y
BEQ :DONE
JSR COUT1
INY
BNE :LOOP
:DONE ; RESTORE STACK
CLC ; EXEC POINTER
TYA ; TO RESUME
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #$00
PHA
LDA ADDR1
PHA
RTS
:EXIT
*

30
disks/disk1_stdio/MINIFY Normal file
View File

@ -0,0 +1,30 @@
5 HOME
8 ONERR GOTO 1000
10 PRINT "ASSEMBLY CODE MINIFIER"
20 PRINT "-=-=-=-=-=-=-=-=-=-=-="
30 PRINT
35 DIM FC$(1500):C = 0
40 INPUT "ENTER THE SOURCE FILE NAME: ";FF$
50 INPUT "ENTER THE DESTINATION FILE NAME: ";DD$
55 PRINT "WORKING.."
60 PRINT CHR$ (4);"OPEN ";FF$
70 PRINT CHR$ (4);"READ ";FF$
80 GET AA$
85 REM ? CHR$ (34);".";
90 IF AA$ = CHR$ (13) THEN GOTO 200
95 S$ = S$ + AA$
110 GOTO 80
200 IF LEFT$ (S$,1) = "*" OR LEFT$ (S$,1) = ";" THEN S$ = ""
500 FC$(C) = S$
510 S$ = ""
520 C = C + 1
990 GOTO 80
1000 PRINT : PRINT CHR$ (4);"CLOSE ";FF$
1010 PRINT CHR$ (4);"OPEN ";DD$
1020 PRINT CHR$ (4);"WRITE ";DD$
1030 FOR Z = 0 TO C
1040 IF FC$(Z) < > "" THEN PRINT FC$(Z)
1050 NEXT Z
1060 PRINT CHR$ (4);"CLOSE ";DD$
1070 PRINT "DONE!": PRINT : PRINT : PRINT
1080 PRINT CHR$ (7): PRINT CHR$ (7): PRINT CHR$ (7)

3396
disks/disk1_stdio/STDIO.DEMO Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,203 @@
*``````````````````````````````*
* CURSFOR :: MOVE CURSOR FORWD *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSFOR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSFOR
CLC
ADC CURSH
STA CURSH
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MAX COL + 1
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
*
********************************
*
:ERREND
*
********************************
*
JSR VTAB
RTS
*
** DATA
*
:E_SID ASC "CURSFOR (CURF MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
*
*``````````````````````````````*
*CURSBAK :: MOVE CURSOR BACKWD *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSBAK *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSBAK
SEC
STA SCRATCH
LDA CURSH
SBC SCRATCH
STA CURSH
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MIN COLUMN
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
*
********************************
*
:ERREND
*
********************************
*
JSR VTAB
RTS
*
** DATA
*
:E_SID ASC "CURSBAK (CURB MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
*
*``````````````````````````````*
* CURSDN :: MOVE CURSOR DOWN *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 20 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSDN *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSDN
CLC
ADC CURSV
STA CURSV
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
*
********************************
*
:ERREND
*
********************************
*
JSR VTAB
RTS
*
** DATA
*
:E_SID ASC "CURSDN (CURD MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00
*
*``````````````````````````````*
* CURSUP :: MOVE CURSOR UP *
* *
*- -*
* FLAGS: NZC----- REG: AYM- *
* CYCLES: 26 *
*- -*
* USAGE: *
* LDA (AMT TO MOVE) *
* JSR CURSUP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
CURSUP
SEC
STA SCRATCH
LDA CURSV
SBC SCRATCH
STA CURSV
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
*
********************************
*
:ERREND
*
********************************
*
JSR VTAB
RTS
*
** DATA
*
:E_SID ASC "CURSUP (CURU MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00
*

View File

@ -0,0 +1,88 @@
CURSFOR
CLC
ADC CURSH
STA CURSH
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MAX COL + 1
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSFOR (CURF MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
CURSBAK
SEC
STA SCRATCH
LDA CURSH
SBC SCRATCH
STA CURSH
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSH
CMP #40 ; MIN COLUMN
BCS :XOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSBAK (CURB MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_XOF ASC "CURSOR X OVERFLOW: X <> MIN/MAX",00
CURSDN
CLC
ADC CURSV
STA CURSV
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSDN (CURD MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00
CURSUP
SEC
STA SCRATCH
LDA CURSV
SBC SCRATCH
STA CURSV
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA CURSV
CMP #24 ; MAX ROWS
BCS :YOVF
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;RETURN;#10
:ERREND
JSR VTAB
RTS
:E_SID ASC "CURSUP (CURU MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_YOF ASC "CURSOR Y OVERFLOW: Y <> MIN/MAX",00

View File

@ -36,47 +36,41 @@
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
* Y = LENGTH OF PRINTED *
* STRING *
* A = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
* Y = LENGTH OF STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
DPRINT
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
PLA
STA RETADR
PLA
STA RETADR+1
*
** GET ADDRESS, STORE IN ZERO PAGE
*
PLA
STA ADDR1
PLA
STA ADDR1+1
PLA
STA ADDR1
PLA
STA ADDR1+1
*
LDY #$00
LDY #$00
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
*
RTS
*
** DATA
*
:RETADR DS 2
LDA RETADR+1
PHA
LDA RETADR
PHA
*
RTS

View File

@ -0,0 +1,22 @@
DPRINT
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #$00
:LOOP
LDA (ADDR1),Y
BEQ :EXIT
JSR COUT1
INY
BNE :LOOP
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS

View File

@ -42,53 +42,90 @@
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = 1 IF PRESSED, 0 IF NOT *
* X = UNCHANGED *
* Y = GARBAGE *
* A = 1 IF PRESSED, 0 IF NOT *
* X = UNCHANGED *
* Y = GARBAGE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
* CHANGE THIS LATER TO ACCEPT ALL BUTTONS, 0-4
*
GBPX
GPBX
*
** SAVE RETURN ADDRESS
*
PLA
STA :RETADR
PLA
STA :RETADR+1
PLA
STA RETADR
PLA
STA RETADR+1
*
** GET PARAMETER
*
PLA
STA ADDR1 ; ZERO PAGE
PLA
STA ADDR1+1
PLA
STA ADDR1 ; ZERO PAGE
PLA
STA ADDR1+1
*
*
LDY #$00
LDA (ADDR1),Y ; IF BTN = PUSHED
BMI :1
JMP :0
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA ADDR1+1
CMP #$C0 ; MAX COL + 1
BNE :BADHI
LDA ADDR1
CMP #$64
BCS :BADLO
LDA ADDR1
CMP #$60
BCC :BADLO
JMP :ERREND
:BADHI
_ERR :E_SID;:E_BHI;:E_DMP1;RETURN;#10
JMP :ERREND
:BADLO
_ERR :E_SID;:E_BLO;:E_DMP1;RETURN;#10
*
********************************
*
:ERREND
*
********************************
*
*
LDY #$00
LDA (ADDR1),Y ; IF BTN = PUSHED
BMI :1
JMP :0
:1
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
:0
LDY #$00 ; BTN NOT PUSHED;A=0
LDY #$00 ; BTN NOT PUSHED;A=0
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA :RETADR+1
PHA
LDA :RETADR
PHA
LDA RETADR+1
PHA
LDA RETADR
PHA
*
TYA ; BTN FLAG MOVE TO A
RTS
TYA ; BTN FLAG MOVE TO A
RTS
*
** DATA
*
:RETADR DS 2
:E_SID ASC "GPBX (PBX MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_BHI ASC "BAD HIGH BYTE--NOT A PADDLE BUTTON!.",00
:E_BLO ASC "BAD LOW BYTE--NOT A PADDLE BUTTON",00
*

View File

@ -0,0 +1,50 @@
GPBX
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA ADDR1 ; ZERO PAGE
PLA
STA ADDR1+1
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA ADDR1+1
CMP #$C0 ; MAX COL + 1
BNE :BADHI
LDA ADDR1
CMP #$64
BCS :BADLO
LDA ADDR1
CMP #$60
BCC :BADLO
JMP :ERREND
:BADHI
_ERR :E_SID;:E_BHI;:E_DMP1;RETURN;#10
JMP :ERREND
:BADLO
_ERR :E_SID;:E_BLO;:E_DMP1;RETURN;#10
:ERREND
LDY #$00
LDA (ADDR1),Y ; IF BTN = PUSHED
BMI :1
JMP :0
:1
LDY #$01 ; BTN PUSHED;A=1
JMP :EXIT
:0
LDY #$00 ; BTN NOT PUSHED;A=0
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
TYA ; BTN FLAG MOVE TO A
RTS
:E_SID ASC "GPBX (PBX MACRO)",00
:E_DMP1 ASC "DUMPING RETURN BLOCK...",00
:E_BHI ASC "BAD HIGH BYTE--NOT A PADDLE BUTTON!.",00
:E_BLO ASC "BAD LOW BYTE--NOT A PADDLE BUTTON",00

View File

@ -0,0 +1,10 @@
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

View File

@ -0,0 +1,358 @@
__GETRET
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA RETURN,Y
STA (ADDR1),Y
CPY RETLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__SETPARM
LDY #255
PLA
STA ADDR1
PLA
STA ADDR1+1
:LP
INY
LDA (ADDR1),Y
STA PARAM,Y
CPY PARLEN
BNE :LP
LDA ADDR1+1
PHA
LDA ADDR1
PHA
RTS
__DUMP
PLA
STA :RET
PLA
STA :RET+1
PLA
STA :LENGTH
PLA
STA ADDR3
PLA
STA ADDR3+1
LDA #$8D
JSR $FDF0
LDA ADDR3+1
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3+1
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$F0
LSR
LSR
LSR
LSR
TAX
LDA HEXTAB,X
JSR $FDF0
LDA ADDR3
AND #$0F
TAX
LDA HEXTAB,X
JSR $FDF0
LDA #186 ; :
JSR $FDF0
LDA #160 ; SPC
JSR $FDF0
LDY #0
:LP
LDA (ADDR3),Y
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA (ADDR3),Y
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
LDA #160
JSR $FDF0
INY
CPY :LENGTH
BNE :LP
LDA :RET+1
PHA
LDA :RET
PHA
RTS
:RET DS 2
:RIGHT DS 1
:LEFT DS 1
:LENGTH DS 1
__P
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #1
:LP LDA (ADDR1),Y
BEQ :DONE
JSR $FDF0
INY
BNE :LP
:DONE CLC
TYA
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #0
PHA
LDA ADDR1
PHA
RTS
__W
JSR $FD0C
RTS
__RSAV
STA ERRA
STX ERRX
STY ERRY
: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 ERRCARRY
JMP :Z
:C1 LDA #1
STA ERRCARRY
JMP :Z
:Z1 LDA #1
STA ERRZERO
JMP :N
:Z0 LDA #0
STA ERRZERO
JMP :N
:N1 LDA #1
STA ERRNEG
JMP :O
:N0 LDA #0
STA ERRNEG
JMP :O
:O0 LDA #0
STA ERROVF
JMP :EXIT
:O1 LDA #1
STA ERROVF
:EXIT
RTS
__RDMP
_PRNT " ",8D8D
_PRNT "REGISTRY DUMP",8D
_PRNT "=============",8D
_PRNT "A: "
LDA ERRA
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRA
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "X: "
LDA ERRX
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRX
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D
_PRNT "Y: "
LDA ERRY
AND #$F0 ; MASK RIGHT
LSR
LSR
LSR
LSR
STA :LEFT
LDA ERRY
AND #$0F ; MASK LEFT
STA :RIGHT
LDX :LEFT
LDA HEXTAB,X
JSR $FDF0
LDX :RIGHT
LDA HEXTAB,X
JSR $FDF0
_PRNT " ",8D8D
_PRNT "STATUS FLAGS",8D
_PRNT "============",8D8D
LDA #0
CMP ERRCARRY
BEQ :CARCLR
_PRNT "CARRY: SET",8D
JMP :TESTN
:CARCLR _PRNT "CARRY: CLEAR",8D
:TESTN LDA #0
CMP ERRNEG
BEQ :NEGCLR
_PRNT "NEGATIVE: SET",8D
JMP :TESTZ
:NEGCLR _PRNT "NEGATIVE: CLEAR",8D
:TESTZ LDA #0
CMP ERRZERO
BEQ :ZCLR
_PRNT "ZERO: SET",8D
JMP :TESTO
:ZCLR _PRNT "ZERO: CLEAR",8D
:TESTO
LDA #0
CMP ERROVF
BEQ :OCLR
_PRNT "OVERFLOW: SET",8D
JMP :FIN
:OCLR _PRNT "OVERFLOW: CLEAR",8D8D8D
:FIN
RTS
:LEFT DS 1
:RIGHT DS 1
HEXTAB ASC "0123456789ABCDEF"
__ERR
JSR __RSAV
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :DUMPLEN ; LENGTH OF DUMP
PLA
STA :DUMP ; DUMP ADDRESS LO
PLA
STA :DUMP+1 ; DUMP HI
PLA
STA :DMPMSG
PLA
STA :DMPMSG+1
PLA
STA :MESG ; ERROR MESSAGE ADDR LO
PLA
STA :MESG+1 ; HI
PLA
STA :SRID ; SUBROUTINE ID ADDR LO
PLA
STA :SRID+1 ; SUB ID HI
_PRNT " ",87878787878D8D
_PRNT "ERROR!",8D8D
_PRNT "SUBROUTINE: "
LDY #0
LDA :SRID
STA ADDR1
LDA :SRID+1
STA ADDR1+1
:LP1
LDA (ADDR1),Y
BEQ :LPX1
JSR $FDF0
INY
BNE :LP1
:LPX1
_PRNT " ",8D
_PRNT "MESSAGE: "
LDY #0
LDA :MESG
STA ADDR1
LDA :MESG+1
STA ADDR1+1
:LP2
LDA (ADDR1),Y
BEQ :LPX2
JSR $FDF0
INY
BNE :LP2
:LPX2
_PRNT " ",8D8D
_WAIT
LDY #0
LDA :DMPMSG
STA ADDR1
LDA :DMPMSG+1
STA ADDR1+1
:LP3
LDA (ADDR1),Y
BEQ :LPX3
JSR $FDF0
INY
BNE :LP3
:LPX3
_PRNT " ",8D
LDA :DUMP+1
PHA
LDA :DUMP
PHA
LDA :DUMPLEN
PHA
JSR __DUMP
_WAIT
LDA RETADR+1
PHA
LDA RETADR
PHA
_PRNT " ",8D8D
_WAIT
_RDUMP
_WAIT
LDA ERRSTOP
CMP #1
BEQ :KILL
RTS
:KILL
JMP $3D0
:DUMPLEN DS 1
:DUMP DS 2
:DMPMSG DS 2
:MESG DS 2
:SRID DS 2

View File

@ -0,0 +1,94 @@
_ISLIT MAC
IF #=]1 ; IF ]1 IS A LITERAL
LDA ]1/$100 ; GET HI
PHA
LDA ]1 ; GET LO
PHA
ELSE ; ]1 IS ADDRESS
LDA ]1+1 ; SO GET HIGH VAL FROM ADDR
PHA
LDA ]1 ; THEN LO VAL
PHA
FIN
<<<
_ISSTR MAC
IF "=]1 ; IF ]1 IS A STRING
JMP STRCONT
]STRTMP STR ]1
STRCONT
LDY #0
LDA ]STRTMP
STA PARLEN
STA PARAM
]STRLP1
INY
LDA ]STRTMP,Y
STA PARAM,Y
CPY PARLEN
BNE ]STRLP1
LDA #>PARAM ; GET HI
PHA
LDA #<PARAM ; GET LO
PHA
ELSE ; ]1 IS ADDRESS
LDA #>]1 ; SO GET HIBYTE OF ADDR
PHA
LDA #<]1 ; THEN LOBYTE
PHA
FIN
<<<
_GRET MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR __GETRET
<<<
_SPAR MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR __SETPARM
<<<
_DUMP MAC
LDA #>]1
PHA
LDA #<]1
PHA
LDA ]2
PHA
JSR __DUMP
<<<
_PRNT MAC
JSR __P
ASC ]1
HEX 00
<<<
_WAIT MAC
JSR __W
<<<
_RDUMP MAC
JSR __RDMP
<<<
_ERR MAC
LDA #>]1
PHA
LDA #<]1
PHA
LDA #>]2
PHA
LDA #<]2
PHA
LDA #>]3
PHA
LDA #<]3
PHA
LDA #>]4
PHA
LDA #<]4
PHA
LDA ]5
PHA
JSR __ERR
<<<

View File

@ -0,0 +1,58 @@
********************************
* *
* VARIABLES AND SETTINGS *
* *
********************************
*
* SETTINGS *********************
*
** ERROR HANDLING
*
** SET ERRSTOP TO 1 IF YOU WANT THE PROGRAM TO
** HALT WHEN AN ERROR IS CAUGHT
*
LDA #1
STA ERRSTOP
*
** SET ERRCTRL TO 1 IF YOU WANT ERROR CATCHING ON
** IN THE FIRST PLACE. HAVING THIS TURNED OFF WILL
** SAVE A FEW CYCLES, BUT POSSIBLY AT THE EXPENSE
** OF YOUR FRUSTRATION. CAN BE TURNED ON LATER THOUGH.
*
LDA #1
STA ERRCTRL
*
*
*
*
JMP VAREND
*
* VARIABLE DECLARATIONS ********
*
ERRSTOP DS 1
ERRCTRL DS 1
ERRA DS 1
ERRX DS 1
ERRY DS 1
ERRCARRY DS 1
ERRNEG DS 1
ERRZERO DS 1
ERROVF DS 1
*
** 256 BYTES DEDICATED TO RETURN
** VALUES OF VARIABLE LENGTH; CAN BE
** MODIFIED TO SUIT SMALLER OR LARGER
** NEEDS.
*
RETLEN DS 1 ; RETURN VALUE BYTE LENGTH
RETURN DS 256
*
** 256 BYTE VALUE DEDICATED TO LARGE
** OR VARIABLE LENGTH PARAMETERS. THIS
** CAN ALSO BE CHANGED TO FIT SMALLER OR
** LARGER BOUNDS.
*
PARLEN DS 1
PARAM DS 256
*
VAREND

View File

@ -0,0 +1,82 @@
*
*``````````````````````````````*
* SINPUT :: SPECIAL INPUT *
* *
* INPUTS A STRING OF TEXT VIA *
* MONITOR HOOKS. MAX 255 CHARS *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* JSR SINPUT *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* LOW BYTE OF INPUT ADDRESS *
* HI BYTE OF INPUT ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = LENGTH OF STRING *
* Y = LENGTH OF STRING *
* *
* [RETURN] = STRING TYPED *
* [RETLEN] = LENGTH OF STRING *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
SINPUT
*
** SAVE RETURN ADDRESS
*
PLA
STA RETADR
PLA
STA RETADR+1
*
LDX #$00
JSR GETLN
STX :STRLEN ; STORE STR LENGTH
CPX #0
BEQ :EXIT
*
:INP_CLR
LDY #0
LDA :STRLEN ; LENGTH OF STRING
STA RETLEN,Y ; PUT LENGTH
:LOOP
LDA KEYBUFF,Y ; PUT STR INTO NEW LOC
STA RETURN,Y
INY
CPY :STRLEN ; IF Y < STR LENGTH
BNE :LOOP ; LOOP; ELSE, CONTINUE
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA RETADR+1
PHA
LDA RETADR
PHA
*
RTS
*
** DATA
*
:STRLEN DS 1
*

View File

@ -0,0 +1,27 @@
SINPUT
PLA
STA RETADR
PLA
STA RETADR+1
LDX #$00
JSR GETLN
STX :STRLEN ; STORE STR LENGTH
CPX #0
BEQ :EXIT
:INP_CLR
LDY #0
LDA :STRLEN ; LENGTH OF STRING
STA RETLEN,Y ; PUT LENGTH
:LOOP
LDA KEYBUFF,Y ; PUT STR INTO NEW LOC
STA RETURN,Y
INY
CPY :STRLEN ; IF Y < STR LENGTH
BNE :LOOP ; LOOP; ELSE, CONTINUE
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
:STRLEN DS 1

View File

@ -0,0 +1,281 @@
*
********************************
* *
* -< STDIO DEMO >- *
* *
* VERSION 00.03.00 *
* *
* 13-JAN-2019 *
* *
********************************
* *
* NATHAN D. RIGGS *
* NATHAN.RIGGS@OUTLOOK.COM *
* *
********************************
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP OFF
TR ON
DSK STDIO.DEMO
OBJ $BFE0
ORG $6000
*
*``````````````````````````````*
* TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT REQUIRED.VARS
PUT REQUIRED.HOOKS.MIN
USE REQUIRED.MAC.MIN
USE STDIO.MAC.MIN
PUT STDIO.HOOKS.MIN
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
JSR HOME ; CLEAR SCREEN
*
** SINCE THE STDIO LIBRARY HAS MACROS IN
** ADDITION TO ROUTINES THAT FUNCTION ON
** THEIR OWN, THIS DEMO WILL PRIMARILY USE
** MACROS TO ILLUSTRATE THEIR FUNCTIONS.
*
** PRN SIMPLY PRINTS A STRING OF TEXT TO THE
** SCREEN AT THE CURRENT CURSOR POSITION, OR
** PRINTS THE DATA AT A PARTICULAR MEMORY ADDRESS.
** IT ACCOMPLISHES THIS BY DETERMINING IF THE
** PARAMETER IS A STRING OR AN ADDRESS, THEN CALLING
** EITHER XPRINT OR DPRINT.
*
** THE ROUTINE QUITS PRINTING ONCE THE VALUE
** OF 00 IS ENCOUNTERED, IN THE CASE OF PRINTING
** PROM MEMORY.
*
** MACRO: PRN "STRING" <OR> PRN STRING_ADDRESS
*
PRN "THE PRN MACRO SIMPLY ",8D
PRN "DISPLAYS A LITERAL STRING ",8D
PRN "OR DATA LOCATED AT A SPECIFIC ",8D
PRN "ADDRESS (THE LATTER WILL BE SHOWN",8D
PRN "AFTER THE INP MACRO.",8D8D
PRN "NOTE THAT A NEW LINE CAN BE SENT ",8D
PRN "BY ADDING ,8D AFTER THE ENDING ",8D
PRN "STRING DELIMITER.",8D8D
_WAIT
*
** MACRO: PCR, NO PARAMETERS
*
PRN "YOU CAN ALSO GET A NEWLINE",8D
PRN "BY USING THE PCR"
PCR
PCR
PCR
PRN "ROUTINE."
PCR
PCR
PCR
_WAIT
*
** MACRO: INP, NO PARAMETERS
*
JSR HOME
PRN "THE INP MACRO ACCEPTS UP TO",8D
PRN "255 CHARACTERS AND STORES THEM",8D
PRN "IN [RETURN]. THIS CAN BE EASILY",8D
PRN "PRINTED IMMEDIATELY WITH PRN BY",8D
PRN "USING THE ADDRESS MODE.",8D8D
PRN "ENTER SOMETHING: "
INP
PCR
PCR
PRN "YOU WROTE: ",8D8D
PRN RETURN
PCR
PCR
_WAIT
*
** MACRO: GKEY, NO PARAMETERS
*
PRN "THE GKEY MACRO SIMPLY GETS",8D
PRN "A SINGLE KEYPRESS, STORED IN .A",8D8D
GKEY
*
** MACRO: SCPOS X_POSITION;Y_POSITION
** MACRO: SETCX X_POSITION
** MACRO: SETCY Y_POSITION
*
JSR HOME
SCPOS #10;#15
PRN "SCPOS POSITIONS THE CURSOR"
PRN " AT THE GIVEN X,Y."
_WAIT
SETCY #20
SETCX #1
PRN "SETCX SETS X POSITION "
SETCY #22
PRN "SETCY SETS THE Y"
_WAIT
*
** MACRO: CURF NUMBER_OF_SPACES
** CURB NUMBER_OF_SPACES
** CURU NUMBER_OF_SPACES
** CURD NUMBER_OF_SPACES
*
JSR HOME
PRN "THE CURSOR CAN ALSO BE MOVED"
_WAIT
CURF #10
PRN "RELATIVE TO THE CURRENT"
_WAIT
CURD #03
PRN "POSITION WITH THE CURF,CURD,"
_WAIT
CURD #8
SETCX #12
CURB #10
PRN "CURB AND"
CURU #05
PRN "CURU (FORWARD, DOWN, BACK, UP)"
_WAIT
*
** MACRO: RCPOS X_POSITION;Y_POSITION
*
JSR HOME
PRN "AAAAAAAAAA"
SCPOS #05;#05
PRN "AABBCC",8D8D8D
RCPOS #05;#05
STA $300
PCR
PRN "THE RCPOS MACRO RETURNS THE",8D
PRN "CHARACTER AT THE GIVEN X,Y",8D
PRN "LOCATION. THE CHAR A 5,5",8D
PRN "IS: "
LDA $300
JSR COUT1
PCR
PCR
_WAIT
*
** MACRO: PDL PADDLE_NUMBER
*
JSR HOME
PRN "THE PDL MACRO READS THE",8D
PRN "CURRENT STATE OF THE PADDLE",8D
PRN "AND RETURNS THAT STATE",8D
PRN "IN .Y.",8D8D
PRN "MOVE THE PADDLE A BIT TO SEE",8D
PRN "THE VALUE OF Y CHANGE.",8D8D
PRN "(PRESS A KEY FIRST, TO START)"
_WAIT
LDA #0
STA $300
LDA #0
STA $310
JSR HOME
PLP
PDL 0
TYA
JSR COUT1
INC $300
LDA $300
CMP #255
BNE PLP
INC $310
LDA $310
CMP #4
BEQ XPLP
BNE PLP
XPLP
*
** MACRO: PBX PADDLE_BUTTON_NUMBER
*
JSR HOME
PRN "THE PBX MACRO RETURNS 1 INTO",8D
PRN "THE ACCUMULATOR IF THE PROMPTED",8D
PRN "PADDLE BUTTON IS PRESSED. THIS",8D
PRN "IS USUALLY PB0 OR PB1. THE",8D
PRN "APPLE KEYS ARE ALSO MAPPED HERE.",8D
PRN "PRESS PADDLE BUTTON ZERO OR OPEN",8D
PRN "APPLE TO CONTINUE."
LDA #0
PBLP
PBX PB0
CMP #1
BNE PBLP
*
** MACRO: TVLIN Y_START;Y_END;X_POSITION;FILL_CHAR
** THLIN X_START;X_END;Y_POSITION;FILL_CHAR
*
** TFILL X_START;X_END;Y_START;Y_ENDLFILL_CHAR
*
JSR HOME
PRN "TVLIN CREATES A VERTICAL LINE",8D
PRN "OF TEXT, WHILE THLIN CREATES",8D
PRN "A HORIZONTAL LINE OF TEXT. YOU",8D
PRN "SPECIFY THE COORDS / FILL CHAR.",8D8D
TVLIN #08;#18;#10;#$AA
_WAIT
THLIN #10;#30;#08;#$AA
_WAIT
TVLIN #8;#18;#30;#$AA
THLIN #10;#31;#17;#$AA
_WAIT
THLIN #0;#39;#0;#$AA
TVLIN #0;#23;#0;#$AA
THLIN #0;#39;#23;#$AA
TVLIN #00;#23;#39;#$AA
_WAIT
TFILL #0;#0;#39;#23;#$AA
_WAIT
TFILL #10;#5;#30;#17;#$A0
_WAIT
SCPOS #12;#7
PRN "AND TFILL FILLS A",8D
SCPOS #12;#9
PRN "GIVEN AREA WITH"
SCPOS #12;#11
PRN "A FILL CHAR"
_WAIT
JSR HOME
PRN "LASTLY, THE TPUT MACRO SIMPLY",8D
PRN "PLOTS A GIVEN CHARACTER TO THE",8D
PRN "SCREEN VIA DIRECT MEMORY ACCESS."
PRN " ",8D8D
_WAIT
TPUT #10;#10;#$AA
TPUT #11;#11;#$AA
TPUT #12;#12;#$AA
TPUT #13;#13;#$AA
TPUT #14;#14;#$AA
_WAIT
JSR HOME
PRN "FIN.",8D8D8D
TPUT #39;#23;#$AA
*
JMP REENTRY
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT REQUIRED.LIB.MIN
*
** INDIVIDUAL SUBROUTINE INCLUDES
*
* STDIO SUBROUTINES
*
PUT XPRINT.SUB.MIN
PUT DPRINT.SUB.MIN
PUT THLINE.SUB.MIN
PUT TVLINE.SUB.MIN
PUT CURSORUDBF.SUB.MIN
PUT TFILLA.SUB.MIN
PUT SINPUT.SUB.MIN
PUT GPBX.SUB.MIN
PUT TXTPUT.SUB.MIN
*

View File

@ -0,0 +1,36 @@
COUT1 EQU $FDF0 ; FASTER SCREEN OUTPUT
COUT EQU $FDED ; MONITOR STD OUTPUT
HOME EQU $FC58 ; CLEAR SCREEN, HOME CURSOR
VTAB EQU $FC22 ; MONITOR CURSOR POS ROUTINE
CURSH EQU $24 ; HPOS OF COUT CURSOR
CURSV EQU $25 ; VPOS OF COUT CURSOR
WNDLEFT EQU $20 ; SCROLL WINDOW LEFT
WNDWIDTH EQU $21 ; SCROLL WINDOW WIDTH
WNDTOP EQU $22 ; SCROLL WINDOW TOP
WNDBOT EQU $23 ; SCROLL WINDOW BOTTOM
TEXTP1 EQU $0400 ; START OF TEXT PAGE 1
TEXTP2 EQU $0800 ; START OF TEXT PAGE 2
PAGE1 EQU $C054 ; SOFT SWITCH USE PAGE 1
PAGE2 EQU $C055 ; SOFT SWITCH USE PAGE 2
S80COL EQU $C01F ; READ ONLY; CHECK IF 80C
KEYBUFF EQU $0200 ; KEYBUFFER START
GSTROBE EQU $C040 ; GAME CONNECTOR STROBE
TXTSET EQU $C051 ; TEXT ON SOFT SWITCH
SETWND EQU $FB4B ; SET NORMAL WINDOW MODE
CURADV EQU $FBF4 ; ADVANCE CURSOR RIGHT
CURBS EQU $FC10 ; CURSOR LEFT
CURUP EQU $FC1A ; CURSOR UP
CR EQU $FC62 ; CARRIAGE RETURN TO SCREEN
LF EQU $FC66 ; LINE FEED ONLY TO SCREEN
CLEOL EQU $FC9C ; CLEAR TEXT TO END OF LINE
KYBD EQU $C000 ; LDA SINGLE KEYPRESS
STROBE EQU $C010 ; CLEAR KYBD BUFFER
GETLN EQU $FD6F ; MONITOR GET LINE OF KB INPUT
GETKEY EQU $FD0C ; MONITOR GET SINGLE KEY INPUT
OPAPP EQU $C061
CLAPP EQU $C062
PREAD EQU $FB1E ; READ STATE OF PADDLE
PB0 EQU $C061 ; PADDLE BUTTON 0
PB1 EQU $C062
PB2 EQU $C063
PB3 EQU $C060

View File

@ -7,94 +7,45 @@
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* VERSION: 0.1.2 *
* DATE: 30-OCT-2018 *
* VERSION: 0.2.0 *
* DATE: 12-DEC-2018 *
* ASSEMBLER: MERLIN 8 PRO *
* *
**** SEE CHANGELOG FOR ****
**** HISTORY OF CHANGES ****
* *
* LICENSE: MIT LICENSE, WHERE *
* APPLICABLE. CODE INSPIRED *
* BY THE WORKS OF OTHERS MAY *
* FALL UNDER A DIFFERENT *
* LICENSE (NOTED IN ROUTINE). *
* LICENSE: APACHE 2.0 *
* OS: DOS 3.3 *
* *
*------------------------------*
* *
* THIS IS A MACRO LIBRARY FOR *
* STDIO.LIB, AND CAN BE USED *
* REGARDLESS OF WHETHER A *
* SPECIFIC FUNCTION IS *
* INCLUDED AS A PUT IN THE *
* MAIN SOURCE. IT IS INTENDED *
* TO SERVE AS A USEFUL SHORT- *
* CUT FOR CALLING THE VARIOUS *
* ROUTINES. SO, YOU KNOW. LIKE *
* A MACRO LIBRARY. *
* STDIO.LIB. *
* *
*------------------------------*
* *
* LIST OF MACROS *
* *
* _TPG1 : SET TEXT PAGE 1 *
* _TPG2 : SET TEXT PAGE 2 *
* _PRN : FLEXIBLE PRINT *
* _PCR : PRINT CARRIAGE RET *
* _PLN : PRINT LINE *
* _INP : SPECIAL INPUT *
* _GKEY : GET SINGLE KEY *
* _WKEY : WAIT FOR KEY *
* _CXY : SET CURS POS AT X,Y *
* _CX : SET CURSOR X *
* _CY : SET CURSOR Y *
* _CURF : CURSOR FORWARD *
* _CURB : CURSOR BACKWARD *
* _CURU : CURSOR UP *
* _CURD : CURSOR DOWN *
* _RCXY : READ CURSOR POSITION *
* _PDL : READ PADDLE STATE *
* _PBX : READ PDL BTN X *
* _TVLN : TEXT VERTICAL LINE *
* _THLN : TEXT HORIZ LINE *
* _TFIL : TEXT FILL AREA *
* PRN : FLEXIBLE PRINT *
* PCR : PRINT CARRIAGE RET *
* INP : SPECIAL INPUT *
* GKEY : GET SINGLE KEY *
* SCPOS : SET CURS POS AT X,Y *
* SETCX : SET CURSOR X *
* SETCY : SET CURSOR Y *
* CURF : CURSOR FORWARD *
* CURB : CURSOR BACKWARD *
* CURU : CURSOR UP *
* CURD : CURSOR DOWN *
* RCPOS : READ CURSOR POSITION *
* PDL : READ PADDLE STATE *
* PBX : READ PDL BTN X *
* TVLIN : TEXT VERTICAL LINE *
* THLIN : TEXT HORIZ LINE *
* TFILL : TEXT FILL AREA *
* TPUT : TEXT CHAR PLOT AT XY *
* *
*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
*
*``````````````````````````````*
* _TPG1 : SET TEXT PAGE 1 *
* *
* SIMPLY SETS TEXT PAGE 1. *
* BARELY WORTH BEING A MACRO, *
* BUT KEEPING FOR NOW. *
*- -*
* PARAMETERS: NONE *
*- -*
* SAMPLE USAGE: _TPG1 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_TPG1 MAC ;SET P1
LDA PAGE1
<<<
*
*``````````````````````````````*
* _TPG2 : SET TEXT PAGE 2 *
* *
* SIMPLY SETS TEXT PAGE 2. *
* BARELY WORTH BEING A MACRO, *
* BUT KEEPING FOR NOW. *
*- -*
* PARAMETERS: NONE *
*- -*
* SAMPLE USAGE: _TPG2 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_TPG2 MAC ;SET P2
LDA PAGE2
<<<
*
*``````````````````````````````*
* _PRN :: PRINT (NO <CR> ) *
* PRN :: PRINT (NO <CR> ) *
*- -*
* EITHER PRINTS A STRING OF *
* TEXT PROVIDED, OR PRINTS THE *
@ -111,179 +62,93 @@ _TPG2 MAC ;SET P2
* A DOLLAR SIGN, THEN IT IS A *
* MEMORY LOCATION, SO PASS TO *
* DPRINT. *
* *
* IF FIRST LETTER OF VAR1 IS *
* AN 'S', THEN A STRING PRINT *
* IS BEING INDICATED. VAR2 *
* (]2) HOLDS THE ADDRESS TO *
* THE STRING; TRANSFER CONTROL *
* TO SPRINT. *
*- -*
* SAMPLE USAGE: *
* *
* _PRN "HELLO!" *
* _PRN $300 *
* _PRN S;$310 *
* PRN "HELLO!" *
* PRN $300 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PRN MAC
*
PRN MAC
IF ",]1 ; --- IF PARAM=STRING
*
JSR XPRINT ; SPECIAL PRINT
ASC ]1 ; PUT STRING HERE
HEX 00 ; STRING TERMINATE
*
ELSE ; ELSE, PARAM IS
; MEMORY LOCATION
*
LDA #>]1 ; PUSH HIGH BYTE
PHA ; TO STACK
LDA #<]1 ; PUSH LOW BYTE
PHA
JSR DPRINT
*
FIN
<<<
*
*``````````````````````````````*
* _PCR: PRINT CARRAIGE RETURN *
* PCR : PRINT CARRAIGE RETURN *
* *
* SIMPLY SENDS A CR AND LINE *
* FEED TO COUT (OR THE *
* EQUIVALENT, ANYHOW). *
*- -*
* PARAMETERS: NONE *
*- -*
* SAMPLE USAGE: _PCR *
* SAMPLE USAGE: PCR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PCR MAC
PCR MAC
LDA #$8D
JSR COUT1
LDA #$00
JSR COUT1
<<<
*
*``````````````````````````````*
* _PLN: PRINT LINE *
* *
* PRINTS A STRING OF TEXT FROM *
* PARAMETER, PRINTS IT AND *
* THEN PRINTS A NEWLINE. *
* CURRENTLY, THIS WILL ONLY *
* SUPPORT DIRECT PRINTS, NOT *
* MEMORY CALLS OR STRINGS. *
*- -*
* PARAMETERS *
* *
* VAR1 SHOULD CONTAIN THE *
* STRING OF CHARACTERS TO BE *
* PRINTED (]1). *
*- -*
* SAMPLE USAGE: *
* *
* _PLN "HELLO!" *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PLN MAC
JSR XPRINT
ASC ]1
HEX 8D00
<<<
*
*``````````````````````````````*
* _INP: INPUT MACRO *
* INP: INPUT MACRO *
* *
* INPUTS A STRING FROM KEYBRD *
* AND STORES IT AT SPECIFIED *
* LOCATION. *
*- -*
* PARAMETERS *
* *
* VAR1 (]1) SHOULD CONTAIN THE *
* ADDRESS WHERE THE INPUTTED *
* STRING WILL BE STORED. *
* AND STORES IT IN [RETURN] *
*- -*
* SAMPLE USAGE: *
* *
* _INP $6A00 *
* INP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_INP MAC
LDA #>]1 ; HIGH ORDER
PHA
LDA #<]1 ; LOW ORDER
PHA
INP MAC
JSR SINPUT
<<<
*
*``````````````````````````````*
* _GKEY [LOC] : GETKEY *
* GKEY GETKEY *
* *
* WAITS FOR USER TO PRESS A *
* KEY, THEN STORES THAT IN *
* THE SPECIFIED LOCATION. *
*- -*
* PARAMETERS *
* *
* THE FIRST PARAMETER SHOULD *
* HOLD THE ADDRESS WHERE THE *
* CHARACTER IS TO BE STORED. *
* KEY, THEN STORES THAT IN .A *
*- -*
* SAMPLE USAGE: *
* *
* _GKEY $6A00 *
* GKEY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_GKEY MAC
LDA #<]1
LDX #>]1
STX ADDR1+1
STA ADDR1
GKEY MAC
JSR GETKEY
LDY #$00
STA (ADDR1),Y
LDA #$00
STA STROBE
LDY #0
STY STROBE
<<<
*
*``````````````````````````````*
* WKEY : WAIT FOR KEYPRESS *
* *
* SIMPLY LOOPS UNTIL A KEY IS *
* PRESSED. KEY VALUE STORED *
* IN ACCUMULATOR. *
*- -*
* PARAMETERS: NONE *
*- -*
* SAMPLE USAGE: _WKEY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_WKEY MAC
_LOOP LDA KYBD
CMP #$80
BCC _LOOP
STA STROBE
<<<
*
*``````````````````````````````*
* _CXY: POSITION CURSOR X,Y *
* SCPOS : POSITION CURSOR X,Y *
*- -*
* SETS THE CURSOR POSITION. *
*- -*
* PARAMETERS *
* *
* THE FIRST PARAMETER SHOULD *
* HOLD THE X POSITION; THE *
* SECOND SHOULD HOLD Y. *
* ]1 = X POSITION *
* ]2 = Y POSITION *
*- -*
* SAMPLE USAGE: *
* *
* _CXY #10;#10 *
* SCPOS #10;#10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CXY MAC
** WARNING: NO ERROR CONTROL
*
SCPOS MAC
LDX ]1
LDY ]2
STX CURSH
@ -292,153 +157,143 @@ _CXY MAC
<<<
*
*``````````````````````````````*
*- _CX: POSITION CURSOR HORIZ -*
* SETCX : SET CURSOR HORIZ *
*- -*
* SETS THE HORIZONTAL POSITION *
* OF THE TEXT CURSOR. *
* NUMBER Y TO MOVE UPWARD. *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER HOLDS X. *
* ]1 = X POSITION *
*- -*
* SAMPLE USAGE: _CX #10 *
* *
* SAMPLE USAGE: SETCX #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CX MAC
** WARNING: NO ERROR CONTROL
*
SETCX MAC
LDX ]1
STX CURSH
JSR VTAB
<<<
*
*``````````````````````````````*
* _CY: POSITION CURSOR VERT *
* SETCY: POSITION CURSOR VERT *
*- -*
* SET CURSOR VERTICAL POSITION *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER HOLDS Y. *
* ]1 = Y POSITION *
*- -*
* SAMPLE USAGE: _CY #10 *
* *
* SAMPLE USAGE: SETCY #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CY MAC
** WARNING: NO ERROR CONTROL
*
SETCY MAC
LDY ]1
STY CURSV
JSR VTAB
<<<
*
*``````````````````````````````*
* _CURF : TEXT CURSOR FORWRD *
* CURF : TEXT CURSOR FORWRD *
*- -*
* MOVES THE CURSOR FORWARD BY *
* SPECIFIED AMOUNT. *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER SHOULD HOLD *
* NUMBER X TO MOVE FORWARD. *
* ]1 = NUMBER TO MOVE FORWARD *
*- -*
* SAMPLE USAGE: _CURF #10 *
* SAMPLE USAGE: CURF #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CURF MAC
CURF MAC
LDA ]1
JSR CURSFOR
<<<
*
*``````````````````````````````*
* _CURB : TEXT CURSOR BACKWD *
* CURB :: TEXT CURSOR BACKWD *
*- -*
* MOVES THE CURSOR BACKWARD BY *
* SPECIFIED AMOUNT. *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER SHOULD HOLD *
* NUMBER X TO MOVE BACKWARD. *
* ]1 = AMOUNT TO MOVE BACKWARD *
*- -*
* SAMPLE USAGE: _CURB #10 *
* SAMPLE USAGE: CURB #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CURB MAC
CURB MAC
LDA ]1
JSR CURSBAK
<<<
*
*``````````````````````````````*
* _CURU : TEXT CURSOR UP *
* CURU :: TEXT CURSOR UP *
*- -*
* MOVES THE CURSOR UP BY *
* SPECIFIED AMOUNT. *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER SHOULD HOLD *
* NUMBER Y TO MOVE UPWARD. *
* ]1 = AMOUNT TO MOVE UP *
*- -*
* SAMPLE USAGE: _CURU #10 *
* *
* SAMPLE USAGE: CURU #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CURU MAC
CURU MAC
LDA ]1
JSR CURSUP
<<<
*
*``````````````````````````````*
* _CURD : TEXT CURSOR DOWN *
* CURD :: TEXT CURSOR DOWN *
*- -*
* MOVES THE CURSOR DOWN BY *
* SPECIFIED AMOUNT. *
*- -*
* PARAMETERS *
* *
* FIRST PARAMETER SHOULD HOLD *
* THE AMOUNT TO MOVE DOWN IN Y *
* ]1 = AMOUNT TO MOVE DOWN *
*- -*
* SAMPLE USAGE: #10 *
* *
* SAMPLE USAGE: CURD #10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_CURD MAC
CURD MAC
LDA ]1
JSR CURSDN
<<<
*
*``````````````````````````````*
* _RCXY : READ SCREEN AT XY *
* RCPOS :: READ SCREEN AT XY *
*- -*
* READ THE CHARACTER AT POS *
* X,Y AND LOADS INTO ACCUM *
*- -*
* PARAMETERS *
* *
* PARAMETER 1 SHOULD HOLD THE *
* X POSITION ON SCREEN TO BE *
* READ, PARAMETER 2 HOLDS Y. *
* ]1 = X POSITION *
* ]2 = Y POSITION *
*- -*
* SAMPLE USAGE: _RCXY #3;#9 *
* *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_RCXY MAC
** WARNING: NO ERROR CONTROL
*
RCPOS MAC
LDA ]1 ; ROW
LDY ]2 ; COLUMN
JSR $F847 ; NOT SURE ABOUT THIS MAGIC NUM
LDA ($26),Y ; LOAD CHAR INTO ACCUM
*
* THANKS GO TO ERIC JACOBS
* IN THE APPLE II ENTHUSIASTS
* FACEBOOK GROUP FOR THIS
*
JSR $F847 ; GBASCALC ROUTINE
LDA ($26),Y ; LOW OF ADDR OF CHAR
<<<
*
*``````````````````````````````*
* PADDLE / MOUSE INPUT *
* PDL PADDLE / MOUSE INPUT *
*- -*
* SIMPLY READS STATE OF PADDLE *
* NUMBER [NUM] AND STORES IT *
@ -446,21 +301,20 @@ _RCXY MAC
*- -*
* PARAMETERS *
* *
* PARAMETER 1 SHOULD HOLD THE *
* NUMBER THAT CORRESPONDS TO *
* THE PADDLE TO READ. *
* ]1 = PADDLE NUMBER TO READ *
*- -*
* SAMPLE USAGE: _PDL #0 *
* *
* SAMPLE USAGE: PDL #0 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PDL MAC ; GET PADDLE VALUE
** WARNING: NO ERROR CONTROL
*
PDL MAC ; GET PADDLE VALUE
LDX #]1 ; READ PADDLE # ]1 (USUALLY 0)
JSR PREAD ; PADDLE READING STORED IN Y
<<<
*
*``````````````````````````````*
* _PBX : PADDLE BUTTON X *
* PBX :: PADDLE BUTTON X *
* *
* STORE 1 IN ACCUMULATOR IF *
* PADDLE BUTTON X IS PRESSED, *
@ -468,17 +322,15 @@ _PDL MAC ; GET PADDLE VALUE
*- -*
* PARAMETERS *
* *
* PARAMETER1 SHOULD HOLD THE *
* ADDRESS OF THE PADDLE BUTTON *
* READ. THEY ARE AS FOLLOWS: *
* ]1 = PADDLE BUTTON TO READ *
* *
* PB0: $C061 PB1: $C062 *
* PB2: $C063 PB4: $C060 *
*- -*
* SAMPLE USAGE: _PBX $C061 *
* SAMPLE USAGE: PBX $C061 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_PBX MAC
PBX MAC
LDA #>]1
PHA
LDA #<]1
@ -487,7 +339,7 @@ _PBX MAC
<<<
*
*``````````````````````````````*
* _TVLN : TEXT VERTICAL LINE *
* TVLIN :: TEXT VERTICAL LINE *
*- -*
* CREATES A VERTICAL LINE OF *
* TEXT AT THE CURRENT CURSOR *
@ -496,17 +348,17 @@ _PBX MAC
*- -*
* PARAMETERS *
* *
* PARAM1 = START OF VLINE, *
* PARAM2 = END POS OF VLINE, *
* PARAM3 = X POSITION OF LINE, *
* PARAM4 = FILL CHARACTER. *
* ]1 = START OF VERTICAL LINE *
* ]2 = END OF VERTICAL LINE *
* ]3 = X POSITION OF LINE *
* ]4 = FILL CHARACTER *
*- -*
* SAMPLE USAGE: *
* *
* _TVLN #0;#10;#3;#$18 *
* TVLIN #0;#10;#3;#$18 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_TVLN MAC
TVLIN MAC
LDA ]1 ; Y START
PHA
LDA ]2 ; Y END
@ -515,11 +367,11 @@ _TVLN MAC
PHA
LDA ]4 ; CHARACTER
PHA
JSR TVLIN
JSR TVLINE
<<<
*
*``````````````````````````````*
* _THLN : TEXT HORIZONTAL LINE *
* THLIN : TEXT HORIZONTAL LINE *
* *
* CREATES A HORIZONTAL LINE OF *
* TEXT FROM X1,Y TO X2,Y WITH *
@ -527,17 +379,17 @@ _TVLN MAC
*- -*
* PARAMETERS *
* *
* PARAM1 = START OF HLINE, *
* PARAM2 = END POS OF HLINE, *
* PARAM3 = Y POSITION OF LINE, *
* PARAM4 = FILL CHARACTER. *
* ]1 = START OF HORIZONTL LINE *
* ]2 = END OF HORIZONTAL LINE *
* ]3 = Y POSITION OF LINE *
* ]4 = FILL CHARACTER *
*- -*
* SAMPLE USAGE: *
* *
* _THLN #0;#10;#12;#$18 *
* THLIN #0;#10;#12;#$18 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_THLN MAC
THLIN MAC
LDA ]1 ; X START
PHA
LDA ]2 ; X END
@ -546,33 +398,33 @@ _THLN MAC
PHA
LDA ]4 ; FILL CHAR
PHA
JSR THLIN
JSR THLINE
<<<
*
*``````````````````````````````*
* _TFIL : TEXT FILL (A) -*
* TFILL :: TEXT FILL *
*- -*
* FILL X1,Y1 TO X2,Y2 WITH *
* SPECIFIED CHARACTER. *
*- -*
* PARAMETERS *
* *
* PARAM1 = LEFT BOUNDARY *
* PARAM2 = RIGHT BOUNDARY *
* PARAM3 = TOP BOUNDARY *
* PARAM4 = BOTTOM BOUNDARY *
* PARAM1 = X1 *
* PARAM2 = Y1 *
* PARAM3 = X2 *
* PARAM4 = Y2 *
*- -*
* SAMPLE USAGE: *
* *
* _TFIL #0;#10;#0;#10 *
* TFILL #0;#10;#0;#10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
_TFIL MAC
TFILL MAC
LDA ]1 ; LEFT BOUNDARY
PHA
LDA ]2 ; RIGHT BOUNDARY
LDA ]2 ; TOP BOUNDARY
PHA
LDA ]3 ; TOP BOUNDARY
LDA ]3 ; RIGHT BOUNDARY
PHA
LDA ]4 ; BOTTOM BOUNDARY
PHA
@ -581,3 +433,29 @@ _TFIL MAC
JSR TFILLA
<<<
*
*``````````````````````````````*
* TPUT :: TEXT CHARACTER PLOT *
*- -*
* PLOT A TEXT CHARACTER AT X,Y *
* DIRECTLY TO MEMORY. *
*- -*
* PARAMETERS *
* *
* PARAM1 = X *
* PARAM2 = Y *
* PARAM3 = CHARACTER *
*- -*
* SAMPLE USAGE: *
* *
* TPUT #$AA;#10;#10 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TPUT MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
JSR TXTPUT
<<<

View File

@ -0,0 +1,120 @@
PRN MAC
IF ",]1 ; --- IF PARAM=STRING
JSR XPRINT ; SPECIAL PRINT
ASC ]1 ; PUT STRING HERE
HEX 00 ; STRING TERMINATE
ELSE ; ELSE, PARAM IS
; MEMORY LOCATION
LDA #>]1 ; PUSH HIGH BYTE
PHA ; TO STACK
LDA #<]1 ; PUSH LOW BYTE
PHA
JSR DPRINT
FIN
<<<
PCR MAC
LDA #$8D
JSR COUT1
<<<
INP MAC
JSR SINPUT
<<<
GKEY MAC
JSR GETKEY
LDY #0
STY STROBE
<<<
SCPOS MAC
LDX ]1
LDY ]2
STX CURSH
STY CURSV
JSR VTAB
<<<
SETCX MAC
LDX ]1
STX CURSH
JSR VTAB
<<<
SETCY MAC
LDY ]1
STY CURSV
JSR VTAB
<<<
CURF MAC
LDA ]1
JSR CURSFOR
<<<
CURB MAC
LDA ]1
JSR CURSBAK
<<<
CURU MAC
LDA ]1
JSR CURSUP
<<<
CURD MAC
LDA ]1
JSR CURSDN
<<<
RCPOS MAC
LDA ]1 ; ROW
LDY ]2 ; COLUMN
JSR $F847 ; GBASCALC ROUTINE
LDA ($26),Y ; LOW OF ADDR OF CHAR
<<<
PDL MAC ; GET PADDLE VALUE
LDX #]1 ; READ PADDLE # ]1 (USUALLY 0)
JSR PREAD ; PADDLE READING STORED IN Y
<<<
PBX MAC
LDA #>]1
PHA
LDA #<]1
PHA
JSR GPBX
<<<
TVLIN MAC
LDA ]1 ; Y START
PHA
LDA ]2 ; Y END
PHA
LDA ]3 ; X POSITION
PHA
LDA ]4 ; CHARACTER
PHA
JSR TVLINE
<<<
THLIN MAC
LDA ]1 ; X START
PHA
LDA ]2 ; X END
PHA
LDA ]3 ; Y POS
PHA
LDA ]4 ; FILL CHAR
PHA
JSR THLINE
<<<
TFILL MAC
LDA ]1 ; LEFT BOUNDARY
PHA
LDA ]2 ; TOP BOUNDARY
PHA
LDA ]3 ; RIGHT BOUNDARY
PHA
LDA ]4 ; BOTTOM BOUNDARY
PHA
LDA ]5 ; FILL CHAR
PHA
JSR TFILLA
<<<
TPUT MAC
LDA ]1
PHA
LDA ]2
PHA
LDA ]3
PHA
JSR TXTPUT
<<<

View File

@ -0,0 +1,174 @@
*
*``````````````````````````````*
* TFILLA :: TEXT FILL AREA *
*- -*
* FILLS A RECTANGULAR AREA OF *
* THE SCREEN WITH THE DESIRED *
* CHARACTER. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (LEFT BOUND) *
* PHA *
* LDA (UPPER BOUND) *
* PHA *
* LDA (RIGHT BOUND) *
* PHA *
* LDA (BOTTOM BOUND) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TFILLA *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL CHAR (:FILL) *
* BOTTOM BOUND (:BOTTOM) *
* RIGHT BOUND (:RIGHT) *
* TOP BOUND (:TOP) *
* LEFT BOUND (:LEFT) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = LOW BYTE OF ADDRESS *
* X = COUNTER DATA; TRASH *
* Y = COUNTER DATA; TRASH *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TFILLA
*
** SAVE RETURN ADDRESS
*
PLA
STA RETADR
PLA
STA RETADR+1
*
** LOAD PARAMETERS
*
PLA
STA :F
PLA
STA :Y2
PLA
STA :X2
PLA
STA :YC
STA :Y1
PLA
STA :XC
STA :X1
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X1
CMP :X2 ; X1 => X2?
BCS :X1HI
LDA :Y1
CMP :Y2
BCS :Y1HI ; Y1 => Y2?
LDA :X1
CMP #40
BCS :XOVF
LDA :X2
CMP #40
BCS :XOVF
LDA :Y1
CMP #24
BCS :YOVF
LDA :Y2
CMP #24
BCS :YOVF
JMP :ERREND
:X1HI
_ERR :E_SID;:E_X1H;:E_DMP1;:X1;#7
JMP :ERREND
:Y1HI
_ERR :E_SID;:E_Y1H;:E_DMP1;:X1;#7
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X1;#7
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X1;#7
*
********************************
*
:ERREND
*
********************************
*
*
:LP1
LDA :YC
LDY :XC
JSR $F847 ; GBASCALC
LDA :F
STA ($26),Y
LDA :YC
INY
STY :XC
CPY :X2
BNE :LP1
*
LDA :X1
STA :XC
INC :YC
LDA :YC
CMP :Y2
BNE :LP1
*
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA RETADR+1
PHA
LDA RETADR
PHA
*
RTS
*
** DATA
*
:X1 DS 1
:X2 DS 1
:Y1 DS 1
:Y2 DS 1
:XC DS 1
:YC DS 1
:F DS 1
*
:E_SID ASC "TFILLA (TFILL MACRO)",00
:E_DMP1 ASC "DUMPING X1(1) X2(1) Y1(1) Y2(1)"
ASC "XC(1) YC(1) F(1)",00
:E_X1H ASC "X1 MUST BE LOWER THAN X2.",00
:E_Y1H ASC "Y1 MUST BE LOWER THAN Y2.",00
:E_XOF ASC "X <> MIN/MAX COLUMNS.",00
:E_YOF ASC "Y <> MIN/MAX ROWS",00
*

View File

@ -0,0 +1,90 @@
TFILLA
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :F
PLA
STA :Y2
PLA
STA :X2
PLA
STA :YC
STA :Y1
PLA
STA :XC
STA :X1
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X1
CMP :X2 ; X1 => X2?
BCS :X1HI
LDA :Y1
CMP :Y2
BCS :Y1HI ; Y1 => Y2?
LDA :X1
CMP #40
BCS :XOVF
LDA :X2
CMP #40
BCS :XOVF
LDA :Y1
CMP #24
BCS :YOVF
LDA :Y2
CMP #24
BCS :YOVF
JMP :ERREND
:X1HI
_ERR :E_SID;:E_X1H;:E_DMP1;:X1;#7
JMP :ERREND
:Y1HI
_ERR :E_SID;:E_Y1H;:E_DMP1;:X1;#7
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X1;#7
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X1;#7
:ERREND
:LP1
LDA :YC
LDY :XC
JSR $F847 ; GBASCALC
LDA :F
STA ($26),Y
LDA :YC
INY
STY :XC
CPY :X2
BNE :LP1
LDA :X1
STA :XC
INC :YC
LDA :YC
CMP :Y2
BNE :LP1
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
:X1 DS 1
:X2 DS 1
:Y1 DS 1
:Y2 DS 1
:XC DS 1
:YC DS 1
:F DS 1
:E_SID ASC "TFILLA (TFILL MACRO)",00
:E_DMP1 ASC "DUMPING X1(1) X2(1) Y1(1) Y2(1)"
ASC "XC(1) YC(1) F(1)",00
:E_X1H ASC "X1 MUST BE LOWER THAN X2.",00
:E_Y1H ASC "Y1 MUST BE LOWER THAN Y2.",00
:E_XOF ASC "X <> MIN/MAX COLUMNS.",00
:E_YOF ASC "Y <> MIN/MAX ROWS",00

View File

@ -0,0 +1,142 @@
*
*``````````````````````````````*
* THLINE :: TEXT HORIZ LINE *
*- -*
* CREATES A HORIZONTAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT Y. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (X-START) *
* PHA *
* LDA (X-END) *
* PHA *
* LDA (Y-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR THLINE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:X1) *
* XPOS END OF LINE (:X2) *
* YPOS OF LINE (:Y) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = START,END OF LINE *
* X = ??? *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
THLINE
*
** SAVE RETURN ADDRESS
*
PLA
STA RETADR
PLA
STA RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F
PLA
STA :Y
PLA
STA :X2
PLA
STA :X1
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X1
CMP :X2
BCS :ERRTOOHI ; X1 => X2
LDA :X1
CMP #39
BCS :ERRXOVF ; X VALUE OVERFLOW
LDA :X2
CMP #40 ; MAX COLS + 1
BCS :ERRXOVF
LDA :Y
CMP #24 ; MAX ROWS + 1
BCS :ERRYOVF
JMP :ERREND
:ERRTOOHI
_ERR :E_SID;:E_XHI;:E_DMP1;:X1;#4
JMP :ERREND
:ERRXOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X1;#4
JMP :ERREND
:ERRYOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X1;#4
JMP :ERREND
*
********************************
*
:ERREND
*
********************************
*
LDA :Y ; LOAD ROW
LDY :X1 ; LOAD X START POS
:LOOP
JSR $F847 ; GBASCALC ROUTINE
LDA :F
STA ($26),Y ; PUSH TO SCREEN MEMORY
LDA :Y
INY ; INCREASE X POS
CPY :X2 ; IF LESS THAN X END POS
BNE :LOOP ; REPEAT UNTIL DONE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
*
** DATA
*
:X1 DS 1
:X2 DS 1
:Y DS 1
:F DS 1 ; FILL CHAR
*
:E_SID ASC "THLINE (THLIN MACRO)",00
:E_DMP1 ASC "DUMPING X1(1) X1(1) Y(1) F(1)",00
:E_XHI ASC "X1 MUST BE LOWER THAN X2.",00
:E_XOF ASC "X > # OF AVAILABLE COLUMNS.",00
:E_YOF ASC "Y > # OF AVAILABLE ROWS",00
*

View File

@ -0,0 +1,66 @@
THLINE
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :F
PLA
STA :Y
PLA
STA :X2
PLA
STA :X1
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X1
CMP :X2
BCS :ERRTOOHI ; X1 => X2
LDA :X1
CMP #39
BCS :ERRXOVF ; X VALUE OVERFLOW
LDA :X2
CMP #40 ; MAX COLS + 1
BCS :ERRXOVF
LDA :Y
CMP #24 ; MAX ROWS + 1
BCS :ERRYOVF
JMP :ERREND
:ERRTOOHI
_ERR :E_SID;:E_XHI;:E_DMP1;:X1;#4
JMP :ERREND
:ERRXOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X1;#4
JMP :ERREND
:ERRYOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X1;#4
JMP :ERREND
:ERREND
LDA :Y ; LOAD ROW
LDY :X1 ; LOAD X START POS
:LOOP
JSR $F847 ; GBASCALC ROUTINE
LDA :F
STA ($26),Y ; PUSH TO SCREEN MEMORY
LDA :Y
INY ; INCREASE X POS
CPY :X2 ; IF LESS THAN X END POS
BNE :LOOP ; REPEAT UNTIL DONE
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
:X1 DS 1
:X2 DS 1
:Y DS 1
:F DS 1 ; FILL CHAR
:E_SID ASC "THLINE (THLIN MACRO)",00
:E_DMP1 ASC "DUMPING X1(1) X1(1) Y(1) F(1)",00
:E_XHI ASC "X1 MUST BE LOWER THAN X2.",00
:E_XOF ASC "X > # OF AVAILABLE COLUMNS.",00
:E_YOF ASC "Y > # OF AVAILABLE ROWS",00

View File

@ -0,0 +1,143 @@
*
*``````````````````````````````*
* TVLINE : TEXT VERTICAL LINE *
*- -*
* CREATES A VERTICAL LINE OF *
* TEXT COMPOSED OF THE FILL *
* CHARACTER SPECIFIED AT X. *
*- -*
* CLOBBERS: *
* *
* FLAGS: ????---- REG: AXYM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA (Y-START) *
* PHA *
* LDA (Y-END) *
* PHA *
* LDA (X-POS) *
* PHA *
* LDA (FILL CHAR) *
* PHA *
* JSR TVLINE *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* XPOS START OF LINE (:Y1) *
* XPOS END OF LINE (:Y2) *
* YPOS OF LINE (:X) *
* FILL CHARACTER (:F) *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = END OF LINE *
* X = HORIZONTAL POSITION *
* A = LOW BYTE OF RET ADDR *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TVLINE
*
** SAVE RETURN ADDRESS
*
PLA
STA RETADR
PLA
STA RETADR+1
*
** GET PARAMETERS
*
PLA
STA :F ; FILL CHAR
PLA
STA :X ; X POS
PLA
STA :Y2 ; END
PLA
STA :Y1 ; START
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :Y1
CMP :Y2
BCS :ERRTOOHI ; Y1 => Y2
LDA :Y2
CMP #24
BCS :ERRYOVF ; Y VALUE OVERFLOW
LDA :X
CMP #40 ; MAX COLS + 1
BCS :ERRXOVF
LDA :Y1
CMP #24 ; MAX ROWS + 1
BCS :ERRYOVF
JMP :ERREND
:ERRTOOHI
_ERR :E_SID;:E_YHI;:E_DMP1;:X;#4
JMP :ERREND
:ERRXOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X;#4
JMP :ERREND
:ERRYOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X;#4
JMP :ERREND
*
********************************
*
:ERREND
*
********************************
*
LDA :Y1
LDY :X
:LOOP
JSR $F847 ; GBASCALC ROUTINE
LDA :F
STA ($26),Y ; PLOT TO SCREEN MEMORY
INC :Y1
LDA :Y1
CMP :Y2 ; IF Y1 < Y2
BNE :LOOP ; LOOP; ELSE, CONTINUE
:EXIT
*
** RESTORE RETURN ADDRESS
*
LDA RETADR+1
PHA
LDA RETADR
PHA
*
RTS
*
** DATA
*
:X DS 1
:Y1 DS 1
:Y2 DS 1
:F DS 1
*
:E_SID ASC "TVLINE (TVLIN MACRO)",00
:E_DMP1 ASC "DUMPING X(1) Y1(1) Y2(1) F(1)",00
:E_YHI ASC "Y1 MUST BE LOWER THAN Y2.",00
:E_XOF ASC "X > # OF AVAILABLE COLUMNS.",00
:E_YOF ASC "Y > # OF AVAILABLE ROWS",00
*

View File

@ -0,0 +1,66 @@
TVLINE
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :F ; FILL CHAR
PLA
STA :X ; X POS
PLA
STA :Y2 ; END
PLA
STA :Y1 ; START
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :Y1
CMP :Y2
BCS :ERRTOOHI ; Y1 => Y2
LDA :Y2
CMP #24
BCS :ERRYOVF ; Y VALUE OVERFLOW
LDA :X
CMP #40 ; MAX COLS + 1
BCS :ERRXOVF
LDA :Y1
CMP #24 ; MAX ROWS + 1
BCS :ERRYOVF
JMP :ERREND
:ERRTOOHI
_ERR :E_SID;:E_YHI;:E_DMP1;:X;#4
JMP :ERREND
:ERRXOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:X;#4
JMP :ERREND
:ERRYOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:X;#4
JMP :ERREND
:ERREND
LDA :Y1
LDY :X
:LOOP
JSR $F847 ; GBASCALC ROUTINE
LDA :F
STA ($26),Y ; PLOT TO SCREEN MEMORY
INC :Y1
LDA :Y1
CMP :Y2 ; IF Y1 < Y2
BNE :LOOP ; LOOP; ELSE, CONTINUE
:EXIT
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
:X DS 1
:Y1 DS 1
:Y2 DS 1
:F DS 1
:E_SID ASC "TVLINE (TVLIN MACRO)",00
:E_DMP1 ASC "DUMPING X(1) Y1(1) Y2(1) F(1)",00
:E_YHI ASC "Y1 MUST BE LOWER THAN Y2.",00
:E_XOF ASC "X > # OF AVAILABLE COLUMNS.",00
:E_YOF ASC "Y > # OF AVAILABLE ROWS",00

View File

@ -0,0 +1,119 @@
*
*``````````````````````````````*
* TXTPUT : PUT CHAR AT X,Y POS *
* *
* SIMPLY PLOTS A CHARACTER AT *
* GIVEN X,Y DIRECTLY TO MEMORY *
*- -*
* CLOBBERS: *
* *
* FLAGS: ???----- REG: A-YM *
*- -*
* CYCLES: ??? *
* SIZE: *
*- -*
* USAGE: *
* LDA #10 ; XPOS *
* PHA *
* LDA #5 ; YPOS *
* PHA *
* LDA #AA ; FILL CHAR *
* PHA *
* JSR TXTPUT *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* FILL CHARACTER *
* Y POSITION *
* X POSITION *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* A = TRASH *
* X = TRASH *
* Y = TRASH *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
TXTPUT
*
** GET RETURN ADDRESS
*
PLA
STA RETADR
PLA
STA RETADR+1
*
** GET VARIABLES
*
PLA
STA :F ; FILL
PLA
STA :Y
PLA
STA :X
*
********************************
*
** ERROR CONTROL
*
********************************
*
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X
CMP #40 ; MAX COL + 1
BCS :XOVF
LDA :Y
CMP #24
BCS :YOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:F;#3
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:F;#3
*
********************************
*
:ERREND
*
********************************
*
*
LDA :Y
LDY :X
JSR $F847
LDA :F
STA ($26),Y
*
**
*
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
*
** DATA
*
:F DS 1
:Y DS 1
:X DS 1
*
:E_SID ASC "TXTPUT (TPUT MACRO)",00
:E_DMP1 ASC "DUMPING F(1) Y(1) X(1):",00
:E_XOF ASC "X OVERFLOW. X <> MIN/MAX",00
:E_YOF ASC "Y OVERFLOW. Y <> MIN/MAX",00
*

View File

@ -0,0 +1,46 @@
TXTPUT
PLA
STA RETADR
PLA
STA RETADR+1
PLA
STA :F ; FILL
PLA
STA :Y
PLA
STA :X
LDA ERRCTRL
CMP #1
BEQ :CHKERR
JMP :ERREND
:CHKERR
LDA :X
CMP #40 ; MAX COL + 1
BCS :XOVF
LDA :Y
CMP #24
BCS :YOVF
JMP :ERREND
:XOVF
_ERR :E_SID;:E_XOF;:E_DMP1;:F;#3
JMP :ERREND
:YOVF
_ERR :E_SID;:E_YOF;:E_DMP1;:F;#3
:ERREND
LDA :Y
LDY :X
JSR $F847
LDA :F
STA ($26),Y
LDA RETADR+1
PHA
LDA RETADR
PHA
RTS
:F DS 1
:Y DS 1
:X DS 1
:E_SID ASC "TXTPUT (TPUT MACRO)",00
:E_DMP1 ASC "DUMPING F(1) Y(1) X(1):",00
:E_XOF ASC "X OVERFLOW. X <> MIN/MAX",00
:E_YOF ASC "Y OVERFLOW. Y <> MIN/MAX",00

View File

@ -0,0 +1,66 @@
*
*``````````````````````````````*
* XPRINT :: SPECIAL PRINT *
*- -*
* PRINTS DATA IMMEDIATELY *
*- -*
* CLOBBERS: *
* *
* FLAGS: NZC----- REG: AYM- *
*- -*
* CYCLES: 53+ *
* SIZE: *
*- -*
* USAGE: *
* JSR SPRINT *
* ASC "HELLO, WORLD!" *
*- -*
* ENTRY *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
*- -*
* EXIT *
* *
* TOP OF STACK *
* *
* LOW BYTE OF RETURN ADDRESS *
* HI BYTE OF RETURN ADDRESS *
* *
* Y = LOW BYTE OF ADDRESS *
* X = UNCHANGED *
* A = LO BYTE *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
XPRINT
*
** GET CURRENT EXEC ADDRESS
*
PLA
STA ADDR1
PLA
STA ADDR1+1
*
LDY #$01 ; POINT TO NEXT
; INSTRUCTION
:LOOP
LDA (ADDR1),Y
BEQ :DONE
JSR COUT1
INY
BNE :LOOP
:DONE ; RESTORE STACK
CLC ; EXEC POINTER
TYA ; TO RESUME
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #$00
PHA
LDA ADDR1
PHA
RTS
:EXIT
*

View File

@ -0,0 +1,25 @@
XPRINT
PLA
STA ADDR1
PLA
STA ADDR1+1
LDY #$01 ; POINT TO NEXT
; INSTRUCTION
:LOOP
LDA (ADDR1),Y
BEQ :DONE
JSR COUT1
INY
BNE :LOOP
:DONE ; RESTORE STACK
CLC ; EXEC POINTER
TYA ; TO RESUME
ADC ADDR1
STA ADDR1
LDA ADDR1+1
ADC #$00
PHA
LDA ADDR1
PHA
RTS
:EXIT