home *** CD-ROM | disk | FTP | other *** search
- .RADIX 8
- .PABS
- .XLINK
- .XSYM
- .SALL
- CONFIG= \"Config <0/zh,3/cpml,5/trs,6/tpm>?- "
- ;
- .IFE CONFIG,[
- CALCOM=1
- TRS80=0
- PLT76= PLTLOC
- DISCRN= ^H0EC00
- ;
- PARAM= ^H400
- $COM= ^H100
- Z80=1
- RSTINT=0
- BEGIN= ^H8000
- PRINIT= BEGIN+^D12
- ;
- CHLT= 177
- DISLOC= ^H0FC00
- DISCLR= DISLOC+3*3]
- ;
- .IFE CONFIG-3,[
- CALCOM=1
- TRS80=0
- PLT76= ^H3000
- DISCRN= ^H0EC00
- ;
- PARAM= ^H3400
- $COM= ^H100
- Z80=1
- RSTINT=0
- BEGIN= ^H1000
- PRINIT= BEGIN+^D12
- ;
- CHLT= 177
- DISLOC= ^H0FC00
- DISCLR= DISLOC+3*3]
- ;
- .IFE CONFIG-5,[
- CALCOM=0
- TRS80=1
- PLT76= ^H4D00
- DISCRN= ^H3C00
- ;
- PARAM= ^H7100
- $COM= ^H4200
- Z80=1
- RSTINT=1
- BEGIN= ^H5100
- PRINIT= BEGIN+^D12
- CHLT= 377
- ;
- TRSIOT=^H4500
- DISCLR= TRSIOT+3*^D7]
- ;
- COMMON= 1
- ;
- ;****** boiler plate starts *******
- .XLIST
- $$SAE= ^D1
- $$SAS= ^D2
- $$SWA= ^D3
- $$SRB= ^D4
- $$SER= ^D5
- $$SLK= ^D6
- $$RXQ= ^D7
- $$SGT= ^D8
- $$SXX= ^D9
- $$RQQ= ^D10
- $$SNQ= ^D11
- $$SRA= ^D12
- $$RVA= ^D13
- $$SHK= ^D14
- $$SPK= ^D15
- $$SLF= ^D16
- $$RNA= ^D17
- $$RNH= ^D18
- $$SAT= ^D19
- $$SFA= ^D20
- $$SDS= ^D21
- $$SDD= ^D22
- $$SWS= ^D23
- $$SAN= ^D24
- $$SFS= ^D25
- $$SGV= ^D26
- $$SSB= ^D27
- $$SPA= ^D28
- $$SRQ= ^D29
- $$SPL= ^D30
- $$RAC= ^D31
- $$RAD= ^D32
- $$RAY= ^D33
- $$RAZ= ^D34
- $$STO= ^D35
- $$STI= ^D36
- $$STL= ^D37
- $$SPR= ^D38
- $$SHR= ^D39
- $$SGQ= ^D40
- $$SXB= ^D41
- $$SXC= ^D42
- $$SUP= ^D43
- $$SMN= ^D44
- $$SDV= ^D45
- $$SUB= ^D46
- $$SPO= ^D47
- $$SRI= ^D48
- $$SXL= ^D49
- $$SLD= ^D50
- ;[DEUQ]
- ;
- .SYN RC,JRQC
- .SYN RZ,JRQZ
- .SYN RNC,JRQNC
- .SYN RNZ,JRQNZ
- .SYN RM,JRQM
- ;
- ;
- ;[DEUM]
- ;
- .DEFINE LINKJ[ADR]=
- [ JMP $COM+3*ADR]
- ;
- .DEFINE LINKC[ADR]=
- [ CALL $COM+3*ADR]
- ;
- .DEFINE SKIP1=
- [ .BYTE 376]
- .DEFINE .T[A,B,C,ADR]=
- [.WORD ((B&7)<15)+((C&37)<10)+((A&37)<2)+((B&30)>3)
- .IFNDEF ADR,[
- .WORD 0]
- .IFDEF ADR,[
- .WORD ADR]
- ]
- .DEFINE MTAB[TAB]=
- [ LXI H,TAB]
- .DEFINE TTAB[M1,M2,ADR]=
- [ .BYTE (M1 & N137)
- .BYTE (M2 & N137)
- .WORD ADR]
- .DEFINE DINX[REG]=
- [ INX REG
- INX REG]
- .DEFINE DDCX[REG]=
- [ DCX REG
- DCX REG]
- .DEFINE JCLA=
- [ XRA A]
- .DEFINE DSUB[SBT]=
- [ XCHG
- LHLD SBT
- CALL MSUB]
- .DEFINE TSTA=
- [ ORA A]
- .DEFINE MJST2[PTR]=
- [ LHLD PTR+2
- XCHG
- LHLD PTR
- CALL MST2]
- .DEFINE MBTEST[TEMP]=
- [ LDA TEMP
- TSTA]
- .DEFINE MMOVE[PTR]=
- [ LHLD PTR+2
- XCHG
- LHLD PTR]
- .DEFINE SKIP2[REG]=
- [.BYTE 001!(((REG)&6)<3)]
- ;
- .DEFINE MJSSR[TO,FRM,FRME]=;def
- [ LHLD FRM
- MOV B,H
- MOV C,L
- LHLD TO
- XCHG
- LHLD FRME
- CALL MSHR
- SHLD FRME]
- ;
- ;
- ;[DEUZ1]
- ;
- .SYN RET,JRQ
- .IFE Z80,[
- .SYN JMP,.JMPR
- .SYN JNC,.JRNC
- .SYN JC,.JRC
- .SYN JNZ,.JRNZ
- .SYN JZ,.JRZ
- ;
- .DEFINE MJSSA[FROM,TO,LNGTH]=
- [ LXI B,LNGTH
- LXI H,FROM
- LXI D,TO
- ;
- CALL MSSA]
- .DEFINE .DJNZ[ADR]=
- [ DCR B
- JNZ ADR]
- ;
- .DEFINE MDSBCD=
- [ MOV A,L
- SUB E
- MOV L,A
- MOV A,H
- SBB D
- MOV H,A]
- ]
- ;
- ;
- .IFG Z80,[
- .SYN JMPR,.JMPR
- .SYN JRNC,.JRNC
- .SYN JRC,.JRC
- .SYN JRNZ,.JRNZ
- .SYN JRZ,.JRZ
- ;
- .DEFINE MJSSA[FROM,TO,LNGTH]=
- [ LXI B,LNGTH
- LXI H,FROM
- LXI D,TO
- LDIR]
- .DEFINE .DJNZ[ADR]=
- [ DJNZ ADR]
- .DEFINE MDSBCD=
- [ JCLA
- DSBC D]
- ]
- ;
- ;
- P=PARAM
- VAR1= P+14
- BOOT= P+15
- MSCI= P+17
- MSRI= P+22
- MSCO= P+25
- MSPO= P+30
- MSLO= P+33
- mscsts= P+36
- MSCHK= P+41
- MSSET= P+44
- MSMCK= P+47
- MSBDOS= P+52
- PSEsym= P+55
- PUIsym= P+57
- PUOsym= P+61
- PULsym= P+63
- TAMsym= P+65
- POAsym= P+67
- POBsym= P+71
- POCsym= P+73
- PODsym= P+75
- PSWsym= P+77
- PSYsym= P+101
- PWAsym= P+103
- tr= P+105
- te= P+106
- RIX= P+107
- BIX= P+110
- MCH= P+111
- TCE= P+112
- CE= P+114
- INPsym= P+116
- OUTsym= P+120
- SPRW3= P+122
- LDRCNL= P+123
- LDRCNH= P+124
- RUBOT= P+125
- RUBO1= P+126
- RUBO2= P+127
- NULCH= P+130
- NULCT= P+131
- PLIN= P+132
- KYN1= P+133
- KYN2= P+134
- CWSAF= P+135
- CWSNF= P+136
- CWSEF= P+137
- CWSPF= P+140
- CWMBF= P+141
- CWMAF= P+142
- CWMNF= P+143
- CWCAS= P+144
- CWCQC= P+145
- CWUNP= P+146
- CWBP1= P+147
- CWEP1= P+150
- CWBP2= P+151
- CWEP2= P+152
- CWBMF= P+153
- CWEMF= P+154
- ENDWC= P+155
- FUTUR0= P+156
- FUTUR1= P+157
- SYN= P+161
- CPCM= P+167
- SYN1= P+171
- SYNR= P+173
- SYNR1= P+175
- CPRP= P+177
- SCEK= P+204
- S1= P+211
- S2= P+212
- S3= P+213
- DSYS1= P+215
- DSYS2= P+217
- DSYS3= P+221
- DSYS4= P+223
- DEXT= P+225
- JMP1TS= P+230
- JMP2TS= P+231
- TAEsym= P+232
- TAHsym= P+234
- TALsym= P+236
- PWR= P+240
- PAE= P+242
- PEL= P+244
- PFL= P+246
- ZERO= P+250
- EXFLG= P+251
- PG1= P+252
- PG1A= P+253
- PG2= P+254
- PG2A= P+255
- BASE= P+256
- LT= P+257
- CH= P+261
- PFI= P+262
- PFF= P+264
- PFN= P+266
- PFT= P+270
- T1= P+272
- T2= P+274
- T3= P+276
- PAL2= P+300
- PAN2= P+302
- PAL= P+304
- PAN= P+306
- PALPL= P+310
- PANPN= P+312
- T4= P+314
- T5= P+316
- T6= P+320
- T7= P+322
- T8= P+324
- T9= P+326
- ADS32= P+330
- ADS33= P+332
- RAND= P+334
- CHA1= P+336
- CHA2= P+340
- PAL21= P+342
- SMSW= P+344
- NULF= P+345
- PNF= P+346
- PNFI= P+347
- ARG1= P+350
- ARG2= P+352
- ARG3= P+354
- TM1= P+356
- MOQOV= P+357
- PCNT= P+362
- ZCNT= P+363
- IOBYT= P+421
- SAMBYT= P+422
- KTRAK= P+423
- DISK1= P+425
- DISK2= P+427
- DISK3= P+431
- DISK4= P+433
- DISK5= P+435
- DISK6= P+437
- DISK7= P+441
- CALDA= P+443
- SAMJM1= P+446
- JMP1AD= P+447
- QWSD0= P+451
- PLTNX= P+454
- PLTNY= P+456
- PLTQD= P+460
- PLTPN= P+462
- PLTCM= P+463
- PLTSX= P+464
- PLTSY= P+465
- PLTWL= P+466
- PLTWR= P+470
- PLTVM= P+472
- TM2= P+473
- TC3= P+475
- TCECT= P+477
- TCEAN= P+501
- SERFLG= P+502
- PKFLG= P+503
- RSTHLD= P+504
- USER1= P+513
- USER1A= P+514
- USER2= P+515
- USER2A= P+516
- USER3= P+517
- USER3A= P+520
- USER4= P+521
- USER4A= P+522
- REGSAV= P+523
- ;[CONSTANTS]
- ;
- N10=10
- N11=11
- N12=12
- N13=13
- N14=14
- N15=15
- N16=16
- N17=17
- N20=20
- N21=21
- N24=24
- N30=30
- N34=34
- N37=37
- N40=40
- N50=50
- N51=51
- N60=60
- N70=70
- N74=74
- N76=76
- N77=77
- N100=100
- N110=110
- N137=137
- N144=144
- N133=133
- N135=135
- N177=177
- N200=200
- N202=202
- N277=277
- N300=300
- N340=340
- N34=34
- N377=377
- N1K=1000
- N1750=1750
- N10K=10000
- N100K=100000
- N2342=23420
- ;
- K400K=200
- K500K=240
- K600K=300
- K700K=340
- ;
- KABM= K600K<N10
- KABN= K700K<N10
- KABF= K400K<N10
- KACM= K500K<N10
- ;
- N400=400
- N47=47
- ;
- KCRLF=4215
- ;
- ;[DEU2]
- ;
- .IFE RSTINT,[
- .DEFINE JSLK=
- [ RST 6]
- .DEFINE JSER=
- [ RST 5]
- .DEFINE JSWA=
- [ RST 3]
- .DEFINE JSAS=
- [ RST 2]
- .DEFINE JSRB=
- [ RST 4]
- .DEFINE JSAE=
- [ RST 1]
- ]
- ;
- .IFG RSTINT,[
- .DEFINE JSAE=
- [ CALL MSAE]
- .DEFINE JSAS=
- [ CALL MSAS]
- .DEFINE JSWA=
- [ CALL MSWA]
- .DEFINE JSRB=
- [ CALL MSRB]
- .DEFINE JSER=
- [ CALL MSER]
- .DEFINE JSLK=
- [ CALL MSLK]
- ]
- ;
- ;
- ;
- .IFDEF COMMON,[
- MSAE= $COM+3*$$SAE
- MSAS= $COM+3*$$SAS
- MSWA= $COM+3*$$SWA
- MSRB= $COM+3*$$SRB
- MSER= $COM+3*$$SER
- MSLK= $COM+3*$$SLK
- ]
- ;
- ;
- .LIST
- ;******** boiler plate ends *******
- .TITLE /PLOT76/
- ;
- .LOC POCsym+PRINIT-VAR1
- ;
- .WORD PLT76
- ;
- .LOC PLT76
- ;[$PLT]
- ;
- OUTPL=USER1
- STSPL=USER1A
- MSKPL=USER2
- ;
- PLTTAB:
- .T "P","L","T",PLTQQ; Plotter
- ;
- PMSCRN: .WORD DISCRN
- ;
- PLTQQ: .BYTE (PLTQE - PLTQB) / 4
- PLTQB:
- .T "P","L"," ",$174; Plot
- .T "W","I"," ",$175; Write Initialize
- .T "W","L"," ",$179; Width Left
- .T "W","R"," ",$178; Width Right
- .T "W","S"," ",$180; Write Straight line
- .T "W","X"," ",$176; Write "X" axis total
- .T "W","Y"," ",$177; Write "Y" axis total
- PLTQE:
- QPLLQ: .BYTE (QPLLE - QPLLB) / 4
- QPLLB:
- .T "A","B","S",QPLAD; Absolute Display
- .IFG CALCOM,[
- .T "A","S"," ",QPLAS; Assign Ports & Mask
- .T "C","A","L",QPLCAL; Calcomp Plotter]
- .IFE TRS80-1,[
- .T "C","W","C",$250; Change Warning Character]
- .T "L","F"," ",QPLLF; List Functions
- .T "M","Q"," ",QPLMQ; Modify Quadrant
- .T "N","M"," ",QPLNM; Null Mode - OUTPUT
- .IFE TRS80-1,[
- .T "T","R","S",QPLTRS; TRS80 Display]
- .IFE TRS80,[
- .T "P","O","L",QPLPOL; Polymorphic Display]
- .T "V","M"," ",QPLVM; Value Mode
- QPLLE:
- PLTQ0: .BYTE "D","H","A","B"
- .BYTE "E","I","F","J"
- ;
- .BYTE "B","A","D","H"
- .BYTE "F","E","J","I"
- ;
- .BYTE "H","D","B","A"
- .BYTE "J","F","I","E"
- ;
- .BYTE "A","B","H","D"
- .BYTE "I","J","E","F"
- ;
- .BYTE "D","H","B","A"
- .BYTE "F","J","E","I"
- ;
- .BYTE "A","B","D","H"
- .BYTE "E","F","I","J"
- ;
- .BYTE "H","D","A","B"
- .BYTE "I","E","J","F"
- ;
- .BYTE "B","A","H","D"
- .BYTE "J","I","F","E"
- ;
- ;
- ; -Y+X,+Y-X,-Y-X,+Y+X,+Y,+X,-Y,-X
- ; DUPR,DDPL,DUPL,DDPR,DD,DR,DU,PL
- ; "I","F","J","E","D","A","H","B"
- ;
- PLTINI: LXI H,JMP1TS
- MOV A,M
- RRC
- RC
- INR M
- ;
- JCLA
- LXI H,PLTNX
- MVI B,^D18
- PLTIN1: MOV M,A
- INX H
- .DJNZ PLTIN1
- ;
- LXI H,PLTQ0
- SHLD PLTQD
- LHLD $COM + 1 + 3 * $$SWA
- SHLD JMP1AD
- MVI A,303
- STA SAMJM1
- ;
- QPLTRS:
- QPLPOL: LXI H,POLPLT
- ;
- QPLN0: STA PLTVM
- SHLD JMP1AD
- jrq;ret
- ;
- QPLVM: INR A
- LHLD $COM + 1 + 3 * $$SWA
- .JMPR QPLN0
- ;
- QPLNM: LHLD $COM + 1 + 3 * $$STO
- .JMPR QPLN0
- ;
- ;[$174/PL]
- ;
- $174: CALL PLTINI
- LINKC $$SAE
- RC
- MTAB QPLLQ
- LINKC $$SPK
- RC
- PCHL
- ;
- QPLLF: MTAB QPLLQ
- LINKJ $$SLF
- ;
- .IFG CALCOM,[
- QPLCAL: LXI H,CALOUT ; Calcomp
- .JMPR QPLN0
- ;
- QPLAS: LINKC $$SXX
- STA OUTPL ; Output port
- LINKC $$SXX
- STA STSPL ; Status port
- LINKC $$SXX
- STA MSKPL ; Status mask
- jrq;ret]
- ;
- ;
- ;[$175/WI]
- $175: CALL MSGM
- $175A: SHLD PLTNX
- CALL MSGM
- SHLD PLTNY
- RET
- ;
- ;[$176/WX]
- $176: LHLD PLTNX
- .JMPR MSLN
- ;
- ;
- ;[$177/WY]
- $177: LHLD PLTNY
- ;
- MSLN: JSER
- MOV B,H
- MOV C,L
- MOV A,H
- ORA A
- MVI A,0
- JP MSLM1
- CALL MSCIH
- MVI A,1
- MSLM1: STA T7
- LINKC $$SWS
- LINKJ $$RVA
- ;
- ;
- ;[$178/WR]
- $178: LHLD PLTWR
- .JMPR MSLN
- ;
- ;[$179/WL]
- $179: LHLD PLTWL
- .JMPR MSLN
- QWS1A: MVI A,1
- SKIP1
- QWS1I: JCLA
- STA PLTCM
- .JMPR QWS2
- ;
- ;
- QWS1Q: CALL QPLMQ
- .JMPR QWS1S0
- ;
- QWS1S: LHLD T5
- MOV A,L
- STA PLTSX
- CALL MSGM
- MOV A,C
- STA PLTSY
- .JMPR QWS1S0
- ;
- QWS1W: LHLD T5
- SHLD PLTWL
- CALL MSGM
- XCHG
- SHLD PLTWR
- .JMPR QWS1S0
- ;
- QWS1C: LHLD T8
- CALL $175A
- MOV A,L
- CMA
- STA YABS
- LDA PLTNX
- CMA
- STA XABS
- CALL DISCLR
- QWS1S0: .JMPR QWS0
- ;
- QWS1U: MVI A,1
- STA T2
- ;
- QWS2: LHLD T3
- DCX H
- DCX H
- SHLD T3
- MOV A,M
- ORA A
- JM QWS3
- INX H
- MOV A,M
- CPI "U"
- .JRZ QWS1U
- CPI "I"
- .JRZ QWS1I
- CPI "Q"
- .JRZ QWS1Q
- CPI "S"
- .JRZ QWS1S
- CPI "W"
- .JRZ QWS1W
- CPI "C"
- .JRZ QWS1C
- CPI "A"
- .JRZ QWS1A
- .JMPR QWS2
- ;
- ;[$180/WS]
- ;
- $180: CALL PLTINI
- ;
- QWSA: LDA PLTVM
- TSTA
- .JRZ QWS0
- JSER
- ;
- QWS0: LINKC $$SAE
- RC
- CALL MSGM
- SHLD T8
- MOV H,B
- MOV L,C
- SHLD T5
- LDA T7
- ORA A
- .JRZ QWS0A
- INR A
- QWS0A: STA ARG1
- XRA A
- STA T2
- LHLD PAL
- SHLD T3
- .JMPR QWS2
- ;
- QWS4: INR M
- .JRNZ QWS5
- MVI C,"`"
- .JMPR QWS6
- QWS5: MVI M,-1
- MVI C,"P"
- QWS6: CALL SAMJM1
- .JMPR QWS1
- QWS3: LXI H,PLTPN
- LDA T2
- ADD M
- .JRZ QWS4
- QWS1: CALL MSGM
- SHLD T9
- MOV H,B
- MOV L,C
- SHLD T6
- LDA PLTCM
- ORA A
- JNZ WSABS
- CALL MSSCX
- CALL MSSCY
- ;
- ;BRANCH HERE FOR INCREMENTAL OR DISPLAY
- ;
- ;INCREMENTAL
- ;
- QWSP0: LDA T7
- ORA A
- .JRZ QWSP1
- LXI H,ARG1
- INR M
- QWSP1: LHLD T5
- XCHG
- LHLD T6
- MOV A,E
- SUB L
- MOV A,D
- SBB H
- .JRC QWSP2
- LDA ARG1
- ORA A
- RAR
- ADI 2
- QWSP6: LHLD PLTQD
- PUSH H
- MOV C,A
- MVI B,0
- DAD B
- MOV A,M
- STA ADS32
- POP H
- LDA ARG1
- ADI 4
- MOV C,A
- DAD B
- MOV A,M
- STA ADS33
- LHLD T5
- PUSH H
- MOV A,H
- RAR
- MOV H,A
- MOV A,L
- RAR
- MOV L,A
- SHLD ARG2
- POP H
- CALL MSCIH
- DCX H
- SHLD ARG1
- .JMPR QWSP3
- ;
- QWSP2: SHLD T5
- XCHG
- SHLD T6
- LDA ARG1
- ANI 1
- .JMPR QWSP6
- ;
- QWSP4: LDA ADS32
- QWSP5: MOV C,A
- CALL SAMJM1;OUTPUT
- LINKC $$SHK
- ;
- QWSP3: LHLD ARG1
- INX H
- SHLD ARG1
- MOV A,H
- ORA L
- JZ QWS0
- ;
- LHLD T6
- XCHG
- LHLD ARG2
- DAD D
- SHLD ARG2
- XCHG
- LHLD T5
- MOV A,D
- SUB H
- MOV A,E
- SBB L
- .JRC QWSP4
- ;
- CALL MSCIH
- XCHG
- LHLD ARG2
- DAD D
- SHLD ARG2
- LDA ADS33
- .JMPR QWSP5
- ;
- WSABS: LHLD PLTNX
- CALL MSCIH
- XCHG
- LHLD T8
- DAD D
- SHLD PLTNX
- MOV A,H
- ORA A
- MVI B,2
- JP SABS0
- CALL MSCIH
- MVI B,0
- SABS0: SHLD T5
- INR B
- LHLD PLTNY
- CALL MSCIH
- XCHG
- LHLD T9
- DAD D
- SHLD PLTNY
- MOV A,H
- ORA A
- JP SABS1
- CALL MSCIH
- DCR B
- SABS1: SHLD T6
- MOV A,B
- STA ARG1
- JMP QWSP1
- ;
- ;
- MSGM: ;JSBD
- LINKC $$SGT
- LDA T7
- ORA A
- RZ
- CALL MSCIH
- RET
- ;
- ;
- MSCIB: MOV A,B
- CMA
- MOV B,A
- MOV A,C
- CMA
- MOV C,A
- INX B
- RET
- MSCIH: MOV A,H
- CMA
- MOV H,A
- MOV A,L
- CMA
- MOV L,A
- INX H
- RET
- ;
- QPLMQ: LINKC $$SGT
- MOV A,B
- ORA A
- RNZ
- MOV A,C
- CPI N10
- RNC
- RAL
- RAL
- RAL
- MOV C,A
- LXI H,PLTQ0
- DAD B
- SHLD PLTQD
- RET
- ;
- ;
- MSSCX: LHLD T8
- LDA PLTSX
- ORA A
- .JRZ SSCX1
- SSCX0: DCR A
- .JRZ SSCX1
- DAD H
- .JMPR SSCX0
- SSCX1: CALL MSCIH
- XCHG
- LHLD PLTNX
- DAD D
- SHLD PLTNX
- RET
- ;
- MSSCY: LHLD T9
- LDA PLTSY
- ORA A
- .JRZ SSCY1
- SSCY0: DCR A
- .JRZ SSCY1
- DAD H
- .JMPR SSCY0
- SSCY1: CALL MSCIH
- XCHG
- LHLD PLTNY
- DAD D
- SHLD PLTNY
- RET
- ;
- ;[DISPLAY CONSTANTS]
- .IFE TRS80-1,[
- KPMP1= ^H2001
- KPMP2= ^H8
- KPMP4= 2]
- ;
- .IFE TRS80,[
- KPMP1= ^H0101
- KPMP2= 2
- KPMP4= 4]
- ;
- ;[POLPLT]
- ;
- ;Polymorphic display mode
- ;
- XABS= USER4
- YABS= USER4A
- XPOS= T1
- YPOS= T2
- PMPEN= QWSD0
- PMSEND= 0
- PMLINL= ^D64
- PMLINH= ^D16
- ;
- ;
- POLPLT: MOV A,C
- ANI 60
- .JRZ PMPLT
- ;
- SUI 20
- STA PMPEN
- ;
- ;
- PMPLT: MOV A,C
- ANI 17
- LXI H,XABS
- RAR
- .JRNC PMPLTA
- INR M
- PMPLTA: RAR
- .JRNC PMPLTB
- DCR M
- PMPLTB: LXI H,YABS
- RAR
- .JRNC PMPLTC
- INR M
- PMPLTC: RAR
- .JRNC PMPLTD
- DCR M
- ;
- PMPLTD: LDA PMPEN
- TSTA
- RNZ ; test for pen
- ;
- ;
- PMPLT2: LDA YABS
- LXI B,KPMP1
- ANI 3
- CPI 3
- .JRZ PMPLT4
- DCR C
- TSTA
- .JRZ PMPLT4
- MVI B,KPMP2
- DCR A
- .JRZ PMPLT4
- MVI B,KPMP4
- PMPLT4: PUSH B; dot code 1/2/4 or 20/8/2
- LDA YABS
- RRC
- RRC
- ADD C
- ANI 17
- MOV B,A
- MVI A,20
- SUB B ; origin bottom of screen
- STA YPOS
- ;
- LDA XABS
- ANI 1
- .JRNZ PMPLT3
- POP PSW
- .IFE TRS80,[
- RLC
- RLC
- RLC]
- .IFE TRS80-1,[
- RAR]
- PUSH PSW
- PMPLT3: LDA XABS
- RRC
- ANI 177
- STA XPOS
- ;
- LDA YPOS
- PUSH PSW
- RRC
- RRC
- ANI 3
- MOV B,A
- POP PSW
- ANI 3
- RRC
- RRC
- MOV C,A ; Y is now in BC
- ;
- LDA XPOS
- ADD C
- MOV C,A ; X,Y are in BC
- ;
- LHLD PMSCRN
- DAD B
- ;
- MOV A,M
- RAL
- .IFE TRS80,[
- .JRNC PMPLT7]
- .IFE TRS80-1,[
- .JRC PMPLT7]
- MVI M,CHLT ; was not dots
- PMPLT7: LDA PNF ; test for neutral
- TSTA
- MOV A,M ; old bits
- POP B
- .IFE TRS80,[
- .JRNZ PMPLT9]
- .IFE TRS80-1,[
- .JRZ PMPLT9]
- CMA
- ORA B ; combine new bits
- CMA
- SKIP1
- PMPLT9: ORA B ; remove new bits
- ;
- .IFE TRS80-1,[
- ORI 200]
- MOV M,A
- RET
- ;
- ;
- ;[CALOUT]
- ;
- ;
- .IFG CALCOM,[
- CALOUT: MOV A,C
- MOV B,C
- ANI N60
- .JRNZ PLD35
- ;
- CALL MSPXL
- CALL DEL25
- MVI B,0
- CALL MSPXL
- DEL25: MVI B,3
- CALL MSDLY
- RET
- ;
- PLD35: CALL MSPXL
- CALL DEL35
- MVI B,0
- CALL MSPXL
- DEL35: MVI B,43
- CALL MSDLY
- RET
- ;
- ;
- MSPXL: LDA OUTPL
- MOV C,A
- OUTP B ;Z80 only
- RET
- ;
- ;
- ;
- MSDLY:
- MSDLY1: LDA STSPL
- MSDLY0: DCR A
- .JRNZ MSDLY0
- .DJNZ MSDLY1
- RET
- ]
- ;
- ;
- .IFE TRS80-1,[
- ;[$250/CWC]
- $250: MTAB CWSAF
- $2501: LINKC $$SRA
- .JRC $2502
- MOV M,C
- INX H
- MOV A,M
- TSTA
- .JRZ $2501
- ;
- $2502: LDA CWSAF
- STA SYN+1
- STA SYN1+1
- LDA CWSEF
- STA CPRP+1
- STA CPRP+3
- LDA CWCAS
- STA CPCM+1
- RET]
- ;
- ;
-
- .END
-