mirror of
https://github.com/nathanriggs/AppleIIAsm-Collection.git
synced 2024-06-08 01:29:28 +00:00
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:
parent
82348c8b8d
commit
f5c097e70f
BIN
bin/d1_stdio.dsk
BIN
bin/d1_stdio.dsk
Binary file not shown.
|
@ -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
|
@ -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
|
@ -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
|
||||
*
|
|
@ -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
|
||||
*
|
||||
*
|
|
@ -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
|
||||
*
|
|
@ -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
|
|
@ -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
|
||||
<<<
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
*
|
|
@ -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
|
||||
*
|
|
@ -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
|
||||
*
|
||||
*
|
|
@ -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
|
|
@ -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
|
||||
*
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
30
disks/disk1_stdio/MINIFY
Normal 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
3396
disks/disk1_stdio/STDIO.DEMO
Normal file
File diff suppressed because it is too large
Load Diff
2877
disks/disk1_stdio/STDIO.DEMO.S
Normal file
2877
disks/disk1_stdio/STDIO.DEMO.S
Normal file
File diff suppressed because it is too large
Load Diff
203
disks/disk1_stdio/T.CURSORUDBF.SUB
Normal file
203
disks/disk1_stdio/T.CURSORUDBF.SUB
Normal 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
|
||||
*
|
88
disks/disk1_stdio/T.CURSORUDBF.SUB.MIN
Normal file
88
disks/disk1_stdio/T.CURSORUDBF.SUB.MIN
Normal 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
|
|
@ -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
|
22
disks/disk1_stdio/T.DPRINT.SUB.MIN
Normal file
22
disks/disk1_stdio/T.DPRINT.SUB.MIN
Normal 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
|
|
@ -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
|
||||
*
|
50
disks/disk1_stdio/T.GPBX.SUB.MIN
Normal file
50
disks/disk1_stdio/T.GPBX.SUB.MIN
Normal 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
|
10
disks/disk1_stdio/T.REQUIRED.HOOKS.MIN
Normal file
10
disks/disk1_stdio/T.REQUIRED.HOOKS.MIN
Normal 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
|
358
disks/disk1_stdio/T.REQUIRED.LIB.MIN
Normal file
358
disks/disk1_stdio/T.REQUIRED.LIB.MIN
Normal 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
|
94
disks/disk1_stdio/T.REQUIRED.MAC.MIN
Normal file
94
disks/disk1_stdio/T.REQUIRED.MAC.MIN
Normal 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
|
||||
<<<
|
58
disks/disk1_stdio/T.REQUIRED.VARS
Normal file
58
disks/disk1_stdio/T.REQUIRED.VARS
Normal 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
|
82
disks/disk1_stdio/T.SINPUT.SUB
Normal file
82
disks/disk1_stdio/T.SINPUT.SUB
Normal 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
|
||||
*
|
27
disks/disk1_stdio/T.SINPUT.SUB.MIN
Normal file
27
disks/disk1_stdio/T.SINPUT.SUB.MIN
Normal 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
|
281
disks/disk1_stdio/T.STDIO.DEMO
Normal file
281
disks/disk1_stdio/T.STDIO.DEMO
Normal 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
|
||||
*
|
36
disks/disk1_stdio/T.STDIO.HOOKS.MIN
Normal file
36
disks/disk1_stdio/T.STDIO.HOOKS.MIN
Normal 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
|
|
@ -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
|
||||
<<<
|
120
disks/disk1_stdio/T.STDIO.MAC.MIN
Normal file
120
disks/disk1_stdio/T.STDIO.MAC.MIN
Normal 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
|
||||
<<<
|
174
disks/disk1_stdio/T.TFILLA.SUB
Normal file
174
disks/disk1_stdio/T.TFILLA.SUB
Normal 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
|
||||
*
|
90
disks/disk1_stdio/T.TFILLA.SUB.MIN
Normal file
90
disks/disk1_stdio/T.TFILLA.SUB.MIN
Normal 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
|
142
disks/disk1_stdio/T.THLINE.SUB
Normal file
142
disks/disk1_stdio/T.THLINE.SUB
Normal 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
|
||||
*
|
66
disks/disk1_stdio/T.THLINE.SUB.MIN
Normal file
66
disks/disk1_stdio/T.THLINE.SUB.MIN
Normal 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
|
143
disks/disk1_stdio/T.TVLINE.SUB
Normal file
143
disks/disk1_stdio/T.TVLINE.SUB
Normal 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
|
||||
*
|
66
disks/disk1_stdio/T.TVLINE.SUB.MIN
Normal file
66
disks/disk1_stdio/T.TVLINE.SUB.MIN
Normal 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
|
119
disks/disk1_stdio/T.TXTPUT.SUB
Normal file
119
disks/disk1_stdio/T.TXTPUT.SUB
Normal 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
|
||||
*
|
46
disks/disk1_stdio/T.TXTPUT.SUB.MIN
Normal file
46
disks/disk1_stdio/T.TXTPUT.SUB.MIN
Normal 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
|
66
disks/disk1_stdio/T.XPRINT.SUB
Normal file
66
disks/disk1_stdio/T.XPRINT.SUB
Normal 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
|
||||
*
|
25
disks/disk1_stdio/T.XPRINT.SUB.MIN
Normal file
25
disks/disk1_stdio/T.XPRINT.SUB.MIN
Normal 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
|
Loading…
Reference in New Issue
Block a user