home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol053 / plot.asm < prev    next >
Assembly Source File  |  1984-04-29  |  15KB  |  1,197 lines

  1. .RADIX 8
  2. .PABS
  3. .XLINK
  4. .XSYM
  5. .SALL
  6. CONFIG=    \"Config <0/zh,3/cpml,5/trs,6/tpm>?- "
  7. ;
  8. .IFE CONFIG,[
  9. CALCOM=1
  10. TRS80=0
  11. PLT76=    PLTLOC
  12. DISCRN=    ^H0EC00
  13. ;
  14. PARAM=    ^H400
  15. $COM=    ^H100
  16. Z80=1
  17. RSTINT=0
  18. BEGIN=    ^H8000
  19. PRINIT=    BEGIN+^D12
  20. ;
  21. CHLT=    177
  22. DISLOC=    ^H0FC00
  23. DISCLR=    DISLOC+3*3]
  24. ;
  25. .IFE CONFIG-3,[
  26. CALCOM=1
  27. TRS80=0
  28. PLT76=    ^H3000
  29. DISCRN=    ^H0EC00
  30. ;
  31. PARAM=    ^H3400
  32. $COM=    ^H100
  33. Z80=1
  34. RSTINT=0
  35. BEGIN=    ^H1000
  36. PRINIT=    BEGIN+^D12
  37. ;
  38. CHLT=    177
  39. DISLOC=    ^H0FC00
  40. DISCLR=    DISLOC+3*3]
  41. ;
  42. .IFE CONFIG-5,[
  43. CALCOM=0
  44. TRS80=1
  45. PLT76=    ^H4D00
  46. DISCRN=    ^H3C00
  47. ;
  48. PARAM=    ^H7100
  49. $COM=    ^H4200
  50. Z80=1
  51. RSTINT=1
  52. BEGIN=    ^H5100
  53. PRINIT=    BEGIN+^D12
  54. CHLT=    377
  55. ;
  56. TRSIOT=^H4500
  57. DISCLR=    TRSIOT+3*^D7]
  58. ;
  59. COMMON=    1
  60. ;
  61. ;****** boiler plate starts *******
  62.     .XLIST
  63. $$SAE=    ^D1
  64. $$SAS=    ^D2
  65. $$SWA=    ^D3
  66. $$SRB=    ^D4
  67. $$SER=    ^D5
  68. $$SLK=    ^D6
  69. $$RXQ=    ^D7
  70. $$SGT=    ^D8
  71. $$SXX=    ^D9
  72. $$RQQ=    ^D10
  73. $$SNQ=    ^D11
  74. $$SRA=    ^D12
  75. $$RVA=    ^D13
  76. $$SHK=    ^D14
  77. $$SPK=    ^D15
  78. $$SLF=    ^D16
  79. $$RNA=    ^D17
  80. $$RNH=    ^D18
  81. $$SAT=    ^D19
  82. $$SFA=    ^D20
  83. $$SDS=    ^D21
  84. $$SDD=    ^D22
  85. $$SWS=    ^D23
  86. $$SAN=    ^D24
  87. $$SFS=    ^D25
  88. $$SGV=    ^D26
  89. $$SSB=    ^D27
  90. $$SPA=    ^D28
  91. $$SRQ=    ^D29
  92. $$SPL=    ^D30
  93. $$RAC=    ^D31
  94. $$RAD=    ^D32
  95. $$RAY=    ^D33
  96. $$RAZ=    ^D34
  97. $$STO=    ^D35
  98. $$STI=    ^D36
  99. $$STL=    ^D37
  100. $$SPR=    ^D38
  101. $$SHR=    ^D39
  102. $$SGQ=    ^D40
  103. $$SXB=    ^D41
  104. $$SXC=    ^D42
  105. $$SUP=    ^D43
  106. $$SMN=    ^D44
  107. $$SDV=    ^D45
  108. $$SUB=    ^D46
  109. $$SPO=    ^D47
  110. $$SRI=    ^D48
  111. $$SXL=    ^D49
  112. $$SLD=    ^D50
  113. ;[DEUQ]
  114. ;
  115. .SYN    RC,JRQC
  116. .SYN    RZ,JRQZ
  117. .SYN    RNC,JRQNC
  118. .SYN    RNZ,JRQNZ
  119. .SYN    RM,JRQM
  120. ;
  121. ;
  122. ;[DEUM]
  123. ;
  124. .DEFINE LINKJ[ADR]=
  125. [    JMP    $COM+3*ADR]
  126. ;
  127. .DEFINE LINKC[ADR]=
  128. [    CALL    $COM+3*ADR]
  129. ;
  130. .DEFINE SKIP1=
  131. [    .BYTE    376]
  132. .DEFINE .T[A,B,C,ADR]=
  133. [.WORD    ((B&7)<15)+((C&37)<10)+((A&37)<2)+((B&30)>3)
  134. .IFNDEF ADR,[
  135.     .WORD    0]
  136. .IFDEF ADR,[
  137.     .WORD    ADR]
  138.  ]
  139. .DEFINE MTAB[TAB]=
  140. [    LXI    H,TAB]
  141. .DEFINE TTAB[M1,M2,ADR]=
  142. [    .BYTE    (M1 & N137) 
  143.     .BYTE    (M2 & N137) 
  144.     .WORD    ADR]
  145. .DEFINE DINX[REG]=
  146. [    INX    REG
  147.     INX    REG]
  148. .DEFINE DDCX[REG]=
  149. [    DCX    REG
  150.     DCX    REG]
  151. .DEFINE JCLA=
  152. [    XRA    A]
  153. .DEFINE DSUB[SBT]=
  154. [    XCHG
  155.     LHLD    SBT
  156.     CALL    MSUB]
  157. .DEFINE TSTA=
  158. [    ORA    A]
  159. .DEFINE MJST2[PTR]=
  160. [    LHLD    PTR+2
  161.     XCHG
  162.     LHLD    PTR
  163.     CALL    MST2]
  164. .DEFINE MBTEST[TEMP]=
  165. [    LDA    TEMP
  166.     TSTA]
  167. .DEFINE MMOVE[PTR]=
  168. [    LHLD    PTR+2
  169.     XCHG
  170.     LHLD    PTR]
  171. .DEFINE SKIP2[REG]=
  172. [.BYTE    001!(((REG)&6)<3)]
  173. ;
  174. .DEFINE MJSSR[TO,FRM,FRME]=;def
  175. [    LHLD    FRM
  176.     MOV    B,H
  177.     MOV    C,L
  178.     LHLD    TO
  179.     XCHG
  180.     LHLD    FRME
  181.     CALL    MSHR
  182.     SHLD    FRME]
  183. ;
  184. ;
  185. ;[DEUZ1]
  186. ;
  187. .SYN RET,JRQ
  188. .IFE Z80,[
  189. .SYN JMP,.JMPR
  190. .SYN JNC,.JRNC
  191. .SYN JC,.JRC
  192. .SYN JNZ,.JRNZ
  193. .SYN JZ,.JRZ
  194. ;
  195. .DEFINE MJSSA[FROM,TO,LNGTH]=
  196. [    LXI    B,LNGTH
  197.     LXI    H,FROM
  198.     LXI    D,TO
  199. ;
  200.     CALL    MSSA]
  201. .DEFINE .DJNZ[ADR]=
  202. [    DCR    B
  203.     JNZ    ADR]
  204. ;
  205. .DEFINE MDSBCD=
  206. [    MOV    A,L
  207.     SUB    E
  208.     MOV    L,A
  209.     MOV    A,H
  210.     SBB    D
  211.     MOV    H,A]
  212.  ]
  213. ;
  214. ;
  215. .IFG Z80,[
  216. .SYN JMPR,.JMPR
  217. .SYN JRNC,.JRNC
  218. .SYN JRC,.JRC
  219. .SYN JRNZ,.JRNZ
  220. .SYN JRZ,.JRZ
  221. ;
  222. .DEFINE MJSSA[FROM,TO,LNGTH]=
  223. [    LXI    B,LNGTH
  224.     LXI    H,FROM
  225.     LXI    D,TO
  226.     LDIR]
  227. .DEFINE .DJNZ[ADR]=
  228. [    DJNZ    ADR]
  229. .DEFINE MDSBCD=
  230. [    JCLA
  231.     DSBC    D]
  232.  ]
  233. ;
  234. ;
  235. P=PARAM
  236. VAR1=    P+14
  237. BOOT=    P+15
  238. MSCI=    P+17
  239. MSRI=    P+22
  240. MSCO=    P+25
  241. MSPO=    P+30
  242. MSLO=    P+33
  243. mscsts=    P+36
  244. MSCHK=    P+41
  245. MSSET=    P+44
  246. MSMCK=    P+47
  247. MSBDOS=    P+52
  248. PSEsym=    P+55
  249. PUIsym=    P+57
  250. PUOsym=    P+61
  251. PULsym=    P+63
  252. TAMsym=    P+65
  253. POAsym=    P+67
  254. POBsym=    P+71
  255. POCsym=    P+73
  256. PODsym=    P+75
  257. PSWsym=    P+77
  258. PSYsym=    P+101
  259. PWAsym=    P+103
  260. tr=    P+105
  261. te=    P+106
  262. RIX=    P+107
  263. BIX=    P+110
  264. MCH=    P+111
  265. TCE=    P+112
  266. CE=    P+114
  267. INPsym=    P+116
  268. OUTsym=    P+120
  269. SPRW3=    P+122
  270. LDRCNL=    P+123
  271. LDRCNH=    P+124
  272. RUBOT=    P+125
  273. RUBO1=    P+126
  274. RUBO2=    P+127
  275. NULCH=    P+130
  276. NULCT=    P+131
  277. PLIN=    P+132
  278. KYN1=    P+133
  279. KYN2=    P+134
  280. CWSAF=    P+135
  281. CWSNF=    P+136
  282. CWSEF=    P+137
  283. CWSPF=    P+140
  284. CWMBF=    P+141
  285. CWMAF=    P+142
  286. CWMNF=    P+143
  287. CWCAS=    P+144
  288. CWCQC=    P+145
  289. CWUNP=    P+146
  290. CWBP1=    P+147
  291. CWEP1=    P+150
  292. CWBP2=    P+151
  293. CWEP2=    P+152
  294. CWBMF=    P+153
  295. CWEMF=    P+154
  296. ENDWC=    P+155
  297. FUTUR0=    P+156
  298. FUTUR1=    P+157
  299. SYN=    P+161
  300. CPCM=    P+167
  301. SYN1=    P+171
  302. SYNR=    P+173
  303. SYNR1=    P+175
  304. CPRP=    P+177
  305. SCEK=    P+204
  306. S1=    P+211
  307. S2=    P+212
  308. S3=    P+213
  309. DSYS1=    P+215
  310. DSYS2=    P+217
  311. DSYS3=    P+221
  312. DSYS4=    P+223
  313. DEXT=    P+225
  314. JMP1TS=    P+230
  315. JMP2TS=    P+231
  316. TAEsym=    P+232
  317. TAHsym=    P+234
  318. TALsym=    P+236
  319. PWR=    P+240
  320. PAE=    P+242
  321. PEL=    P+244
  322. PFL=    P+246
  323. ZERO=    P+250
  324. EXFLG=    P+251
  325. PG1=    P+252
  326. PG1A=    P+253
  327. PG2=    P+254
  328. PG2A=    P+255
  329. BASE=    P+256
  330. LT=    P+257
  331. CH=    P+261
  332. PFI=    P+262
  333. PFF=    P+264
  334. PFN=    P+266
  335. PFT=    P+270
  336. T1=    P+272
  337. T2=    P+274
  338. T3=    P+276
  339. PAL2=    P+300
  340. PAN2=    P+302
  341. PAL=    P+304
  342. PAN=    P+306
  343. PALPL=    P+310
  344. PANPN=    P+312
  345. T4=    P+314
  346. T5=    P+316
  347. T6=    P+320
  348. T7=    P+322
  349. T8=    P+324
  350. T9=    P+326
  351. ADS32=    P+330
  352. ADS33=    P+332
  353. RAND=    P+334
  354. CHA1=    P+336
  355. CHA2=    P+340
  356. PAL21=    P+342
  357. SMSW=    P+344
  358. NULF=    P+345
  359. PNF=    P+346
  360. PNFI=    P+347
  361. ARG1=    P+350
  362. ARG2=    P+352
  363. ARG3=    P+354
  364. TM1=    P+356
  365. MOQOV=    P+357
  366. PCNT=    P+362
  367. ZCNT=    P+363
  368. IOBYT=    P+421
  369. SAMBYT=    P+422
  370. KTRAK=    P+423
  371. DISK1=    P+425
  372. DISK2=    P+427
  373. DISK3=    P+431
  374. DISK4=    P+433
  375. DISK5=    P+435
  376. DISK6=    P+437
  377. DISK7=    P+441
  378. CALDA=    P+443
  379. SAMJM1=    P+446
  380. JMP1AD=    P+447
  381. QWSD0=    P+451
  382. PLTNX=    P+454
  383. PLTNY=    P+456
  384. PLTQD=    P+460
  385. PLTPN=    P+462
  386. PLTCM=    P+463
  387. PLTSX=    P+464
  388. PLTSY=    P+465
  389. PLTWL=    P+466
  390. PLTWR=    P+470
  391. PLTVM=    P+472
  392. TM2=    P+473
  393. TC3=    P+475
  394. TCECT=    P+477
  395. TCEAN=    P+501
  396. SERFLG=    P+502
  397. PKFLG=    P+503
  398. RSTHLD=    P+504
  399. USER1=    P+513
  400. USER1A=    P+514
  401. USER2=    P+515
  402. USER2A=    P+516
  403. USER3=    P+517
  404. USER3A=    P+520
  405. USER4=    P+521
  406. USER4A=    P+522
  407. REGSAV=    P+523
  408. ;[CONSTANTS]
  409. ;
  410. N10=10
  411. N11=11
  412. N12=12
  413. N13=13
  414. N14=14
  415. N15=15
  416. N16=16
  417. N17=17
  418. N20=20
  419. N21=21
  420. N24=24
  421. N30=30
  422. N34=34
  423. N37=37
  424. N40=40
  425. N50=50
  426. N51=51
  427. N60=60
  428. N70=70
  429. N74=74
  430. N76=76
  431. N77=77
  432. N100=100
  433. N110=110
  434. N137=137
  435. N144=144
  436. N133=133
  437. N135=135
  438. N177=177
  439. N200=200
  440. N202=202
  441. N277=277
  442. N300=300
  443. N340=340
  444. N34=34
  445. N377=377
  446. N1K=1000
  447. N1750=1750
  448. N10K=10000
  449. N100K=100000
  450. N2342=23420
  451. ;
  452. K400K=200
  453. K500K=240
  454. K600K=300
  455. K700K=340
  456. ;
  457. KABM=    K600K<N10
  458. KABN=    K700K<N10
  459. KABF=    K400K<N10
  460. KACM=    K500K<N10
  461. ;
  462. N400=400
  463. N47=47
  464. ;
  465. KCRLF=4215
  466. ;
  467. ;[DEU2]
  468. ;
  469. .IFE RSTINT,[
  470. .DEFINE JSLK=
  471. [    RST    6]
  472. .DEFINE JSER=
  473. [    RST    5]
  474. .DEFINE JSWA=
  475. [    RST    3]
  476. .DEFINE JSAS=
  477. [    RST    2]
  478. .DEFINE JSRB=
  479. [    RST    4]
  480. .DEFINE JSAE=
  481. [    RST    1]
  482. ]
  483. ;
  484. .IFG RSTINT,[
  485. .DEFINE JSAE=
  486. [    CALL    MSAE]
  487. .DEFINE JSAS=
  488. [    CALL    MSAS]
  489. .DEFINE JSWA=
  490. [    CALL    MSWA]
  491. .DEFINE JSRB=
  492. [    CALL    MSRB]
  493. .DEFINE JSER=
  494. [    CALL    MSER]
  495. .DEFINE JSLK=
  496. [    CALL    MSLK]
  497. ]
  498. ;
  499. ;
  500. ;
  501. .IFDEF COMMON,[
  502. MSAE=    $COM+3*$$SAE
  503. MSAS=    $COM+3*$$SAS
  504. MSWA=    $COM+3*$$SWA
  505. MSRB=    $COM+3*$$SRB
  506. MSER=    $COM+3*$$SER
  507. MSLK=    $COM+3*$$SLK
  508.  ]
  509. ;
  510. ;
  511.     .LIST
  512. ;******** boiler plate ends *******
  513. .TITLE /PLOT76/
  514. ;
  515. .LOC    POCsym+PRINIT-VAR1
  516. ;
  517. .WORD    PLT76
  518. ;
  519. .LOC    PLT76
  520. ;[$PLT]
  521. ;
  522. OUTPL=USER1
  523. STSPL=USER1A
  524. MSKPL=USER2
  525. ;
  526. PLTTAB:
  527. .T "P","L","T",PLTQQ; Plotter
  528. ;
  529. PMSCRN:    .WORD    DISCRN
  530. ;
  531. PLTQQ:    .BYTE    (PLTQE - PLTQB) / 4
  532. PLTQB:
  533. .T "P","L"," ",$174;    Plot
  534. .T "W","I"," ",$175;    Write Initialize
  535. .T "W","L"," ",$179;    Width Left
  536. .T "W","R"," ",$178;    Width Right
  537. .T "W","S"," ",$180;    Write Straight line
  538. .T "W","X"," ",$176;    Write "X" axis total
  539. .T "W","Y"," ",$177;    Write "Y" axis total
  540. PLTQE:
  541. QPLLQ:    .BYTE    (QPLLE - QPLLB) / 4
  542. QPLLB:
  543. .T "A","B","S",QPLAD;    Absolute Display
  544. .IFG CALCOM,[
  545. .T "A","S"," ",QPLAS;    Assign Ports & Mask
  546. .T "C","A","L",QPLCAL;    Calcomp Plotter]
  547. .IFE TRS80-1,[
  548. .T "C","W","C",$250;    Change Warning Character]
  549. .T "L","F"," ",QPLLF;    List Functions
  550. .T "M","Q"," ",QPLMQ;    Modify Quadrant
  551. .T "N","M"," ",QPLNM;    Null Mode - OUTPUT
  552. .IFE TRS80-1,[
  553. .T "T","R","S",QPLTRS;    TRS80 Display]
  554. .IFE TRS80,[
  555. .T "P","O","L",QPLPOL;    Polymorphic Display]
  556. .T "V","M"," ",QPLVM;    Value Mode
  557. QPLLE:
  558. PLTQ0:    .BYTE    "D","H","A","B"
  559.     .BYTE    "E","I","F","J"
  560. ;
  561.     .BYTE    "B","A","D","H"
  562.     .BYTE    "F","E","J","I"
  563. ;
  564.     .BYTE    "H","D","B","A"
  565.     .BYTE    "J","F","I","E"
  566. ;
  567.     .BYTE    "A","B","H","D"
  568.     .BYTE    "I","J","E","F"
  569. ;
  570.     .BYTE    "D","H","B","A"
  571.     .BYTE    "F","J","E","I"
  572. ;
  573.     .BYTE    "A","B","D","H"
  574.     .BYTE    "E","F","I","J"
  575. ;
  576.     .BYTE    "H","D","A","B"
  577.     .BYTE    "I","E","J","F"
  578. ;
  579.     .BYTE    "B","A","H","D"
  580.     .BYTE    "J","I","F","E"
  581. ;
  582. ;
  583. ;    -Y+X,+Y-X,-Y-X,+Y+X,+Y,+X,-Y,-X
  584. ;    DUPR,DDPL,DUPL,DDPR,DD,DR,DU,PL
  585. ;    "I","F","J","E","D","A","H","B"
  586. ;
  587. PLTINI:    LXI    H,JMP1TS
  588.     MOV    A,M
  589.     RRC
  590.     RC
  591.     INR    M
  592. ;
  593.     JCLA
  594.     LXI    H,PLTNX
  595.     MVI    B,^D18
  596. PLTIN1:    MOV    M,A
  597.     INX    H
  598.     .DJNZ    PLTIN1
  599. ;
  600.     LXI    H,PLTQ0
  601.     SHLD    PLTQD
  602.     LHLD    $COM + 1 + 3 * $$SWA
  603.     SHLD    JMP1AD
  604.     MVI    A,303
  605.     STA    SAMJM1
  606. ;
  607. QPLTRS:
  608. QPLPOL:    LXI    H,POLPLT
  609. ;
  610. QPLN0:    STA    PLTVM
  611.     SHLD    JMP1AD
  612.     jrq;ret
  613. ;
  614. QPLVM:    INR    A
  615.     LHLD    $COM + 1 + 3 * $$SWA
  616.     .JMPR    QPLN0
  617. ;
  618. QPLNM:    LHLD    $COM + 1 + 3 * $$STO
  619.     .JMPR    QPLN0
  620. ;
  621. ;[$174/PL]
  622. ;
  623. $174:    CALL    PLTINI
  624.     LINKC    $$SAE
  625.     RC
  626.     MTAB    QPLLQ
  627.     LINKC    $$SPK
  628.     RC
  629.     PCHL
  630. ;
  631. QPLLF:    MTAB    QPLLQ
  632.     LINKJ    $$SLF
  633. ;
  634. .IFG CALCOM,[
  635. QPLCAL:    LXI    H,CALOUT    ; Calcomp
  636.     .JMPR    QPLN0
  637. ;
  638. QPLAS:    LINKC    $$SXX
  639.     STA    OUTPL    ; Output port
  640.     LINKC    $$SXX
  641.     STA    STSPL    ; Status port
  642.     LINKC    $$SXX
  643.     STA    MSKPL    ; Status mask
  644.     jrq;ret]
  645. ;
  646. ;
  647. ;[$175/WI]
  648. $175:    CALL    MSGM
  649. $175A:    SHLD    PLTNX
  650.     CALL    MSGM
  651.     SHLD    PLTNY
  652.     RET
  653. ;
  654. ;[$176/WX]
  655. $176:    LHLD    PLTNX
  656.     .JMPR    MSLN
  657. ;
  658. ;
  659. ;[$177/WY]
  660. $177:    LHLD    PLTNY
  661. ;
  662. MSLN:    JSER
  663.     MOV    B,H
  664.     MOV    C,L
  665.     MOV    A,H
  666.     ORA    A
  667.     MVI    A,0
  668.     JP    MSLM1
  669.     CALL    MSCIH
  670.     MVI    A,1
  671. MSLM1:    STA    T7
  672.     LINKC    $$SWS
  673.     LINKJ    $$RVA
  674. ;
  675. ;
  676. ;[$178/WR]
  677. $178:    LHLD    PLTWR
  678.     .JMPR    MSLN
  679. ;
  680. ;[$179/WL]
  681. $179:    LHLD    PLTWL
  682.     .JMPR    MSLN
  683. QWS1A:    MVI    A,1
  684.     SKIP1
  685. QWS1I:    JCLA
  686.     STA    PLTCM
  687.     .JMPR    QWS2
  688. ;
  689. ;
  690. QWS1Q:    CALL    QPLMQ
  691.     .JMPR    QWS1S0
  692. ;
  693. QWS1S:    LHLD    T5
  694.     MOV    A,L
  695.     STA    PLTSX
  696.     CALL    MSGM
  697.     MOV    A,C
  698.     STA    PLTSY
  699.     .JMPR    QWS1S0
  700. ;
  701. QWS1W:    LHLD    T5
  702.     SHLD    PLTWL
  703.     CALL    MSGM
  704.     XCHG
  705.     SHLD    PLTWR
  706.     .JMPR    QWS1S0
  707. ;
  708. QWS1C:    LHLD    T8
  709.     CALL    $175A
  710.     MOV    A,L
  711.     CMA
  712.     STA    YABS
  713.     LDA    PLTNX
  714.     CMA
  715.     STA    XABS
  716.     CALL    DISCLR
  717. QWS1S0:    .JMPR    QWS0
  718. ;
  719. QWS1U:    MVI    A,1
  720.     STA    T2
  721. ;
  722. QWS2:    LHLD    T3
  723.     DCX    H
  724.     DCX    H
  725.     SHLD    T3
  726.     MOV    A,M
  727.     ORA    A
  728.     JM    QWS3
  729.     INX    H
  730.     MOV    A,M
  731.     CPI    "U"
  732.     .JRZ    QWS1U
  733.     CPI    "I"
  734.     .JRZ    QWS1I
  735.     CPI    "Q"
  736.     .JRZ    QWS1Q
  737.     CPI    "S"
  738.     .JRZ    QWS1S
  739.     CPI    "W"
  740.     .JRZ    QWS1W
  741.     CPI    "C"
  742.     .JRZ    QWS1C
  743.     CPI    "A"
  744.     .JRZ    QWS1A
  745.     .JMPR    QWS2
  746. ;
  747. ;[$180/WS]
  748. ;
  749. $180:    CALL    PLTINI
  750. ;
  751. QWSA:    LDA    PLTVM
  752.     TSTA
  753.     .JRZ    QWS0
  754.     JSER
  755. ;
  756. QWS0:    LINKC    $$SAE
  757.     RC
  758.     CALL    MSGM
  759.     SHLD    T8
  760.     MOV    H,B
  761.     MOV    L,C
  762.     SHLD    T5
  763.     LDA    T7
  764.     ORA    A
  765.     .JRZ    QWS0A
  766.     INR    A
  767. QWS0A:    STA    ARG1
  768.     XRA    A
  769.     STA    T2
  770.     LHLD    PAL
  771.     SHLD    T3
  772.     .JMPR    QWS2
  773. ;
  774. QWS4:    INR    M
  775.     .JRNZ    QWS5
  776.     MVI    C,"`"
  777.     .JMPR    QWS6
  778. QWS5:    MVI    M,-1
  779.     MVI    C,"P"
  780. QWS6:    CALL    SAMJM1
  781.     .JMPR    QWS1
  782. QWS3:    LXI    H,PLTPN
  783.     LDA    T2
  784.     ADD    M
  785.     .JRZ    QWS4
  786. QWS1:    CALL    MSGM
  787.     SHLD    T9
  788.     MOV    H,B
  789.     MOV    L,C
  790.     SHLD    T6
  791.     LDA    PLTCM
  792.     ORA    A
  793.     JNZ    WSABS
  794.     CALL    MSSCX
  795.     CALL    MSSCY
  796. ;
  797. ;BRANCH HERE FOR INCREMENTAL OR DISPLAY
  798. ;
  799. ;INCREMENTAL
  800. ;
  801. QWSP0:    LDA    T7
  802.     ORA    A
  803.     .JRZ    QWSP1
  804.     LXI    H,ARG1
  805.     INR    M
  806. QWSP1:    LHLD    T5
  807.     XCHG
  808.     LHLD    T6
  809.     MOV    A,E
  810.     SUB    L
  811.     MOV    A,D
  812.     SBB    H
  813.     .JRC    QWSP2
  814.     LDA    ARG1
  815.     ORA    A
  816.     RAR
  817.     ADI    2
  818. QWSP6:    LHLD    PLTQD
  819.     PUSH    H
  820.     MOV    C,A
  821.     MVI    B,0
  822.     DAD    B
  823.     MOV    A,M
  824.     STA    ADS32
  825.     POP    H
  826.     LDA    ARG1
  827.     ADI    4
  828.     MOV    C,A
  829.     DAD    B
  830.     MOV    A,M
  831.     STA    ADS33
  832.     LHLD    T5
  833.     PUSH    H
  834.     MOV    A,H
  835.     RAR
  836.     MOV    H,A
  837.     MOV    A,L
  838.     RAR
  839.     MOV    L,A
  840.     SHLD    ARG2
  841.     POP    H
  842.     CALL    MSCIH
  843.     DCX    H
  844.     SHLD    ARG1
  845.     .JMPR    QWSP3
  846. ;
  847. QWSP2:    SHLD    T5
  848.     XCHG
  849.     SHLD    T6
  850.     LDA    ARG1
  851.     ANI    1
  852.     .JMPR    QWSP6
  853. ;
  854. QWSP4:    LDA    ADS32
  855. QWSP5:    MOV    C,A
  856.     CALL    SAMJM1;OUTPUT
  857.     LINKC    $$SHK
  858. ;
  859. QWSP3:    LHLD    ARG1
  860.     INX    H
  861.     SHLD    ARG1
  862.     MOV    A,H
  863.     ORA    L
  864.     JZ    QWS0
  865. ;
  866.     LHLD    T6
  867.     XCHG
  868.     LHLD    ARG2
  869.     DAD    D
  870.     SHLD    ARG2
  871.     XCHG
  872.     LHLD    T5
  873.     MOV    A,D
  874.     SUB    H
  875.     MOV    A,E
  876.     SBB    L
  877.     .JRC    QWSP4
  878. ;
  879.     CALL    MSCIH
  880.     XCHG
  881.     LHLD    ARG2
  882.     DAD    D
  883.     SHLD    ARG2
  884.     LDA    ADS33
  885.     .JMPR    QWSP5
  886. ;
  887. WSABS:    LHLD    PLTNX
  888.     CALL    MSCIH
  889.     XCHG
  890.     LHLD    T8
  891.     DAD    D
  892.     SHLD    PLTNX
  893.     MOV    A,H
  894.     ORA    A
  895.     MVI    B,2
  896.     JP    SABS0
  897.     CALL    MSCIH
  898.     MVI    B,0
  899. SABS0:    SHLD    T5
  900.     INR    B
  901.     LHLD    PLTNY
  902.     CALL    MSCIH
  903.     XCHG
  904.     LHLD    T9
  905.     DAD    D
  906.     SHLD    PLTNY
  907.     MOV    A,H
  908.     ORA    A
  909.     JP    SABS1
  910.     CALL    MSCIH
  911.     DCR    B
  912. SABS1:    SHLD    T6
  913.     MOV    A,B
  914.     STA    ARG1
  915.     JMP    QWSP1
  916. ;
  917. ;
  918. MSGM:        ;JSBD
  919.     LINKC    $$SGT
  920.     LDA    T7
  921.     ORA    A
  922.     RZ
  923.     CALL    MSCIH
  924.     RET
  925. ;
  926. ;
  927. MSCIB:    MOV    A,B
  928.     CMA
  929.     MOV    B,A
  930.     MOV    A,C
  931.     CMA
  932.     MOV    C,A
  933.     INX    B
  934.     RET
  935. MSCIH:    MOV    A,H
  936.     CMA
  937.     MOV    H,A
  938.     MOV    A,L
  939.     CMA
  940.     MOV    L,A
  941.     INX    H
  942.     RET
  943. ;
  944. QPLMQ:    LINKC    $$SGT
  945.     MOV    A,B
  946.     ORA    A
  947.     RNZ
  948.     MOV    A,C
  949.     CPI    N10
  950.     RNC
  951.     RAL
  952.     RAL
  953.     RAL
  954.     MOV    C,A
  955.     LXI    H,PLTQ0
  956.     DAD    B
  957.     SHLD    PLTQD
  958.     RET
  959. ;
  960. ;
  961. MSSCX:    LHLD    T8
  962.     LDA    PLTSX
  963.     ORA    A
  964.     .JRZ    SSCX1
  965. SSCX0:    DCR    A
  966.     .JRZ    SSCX1
  967.     DAD    H
  968.     .JMPR    SSCX0
  969. SSCX1:    CALL    MSCIH
  970.     XCHG
  971.     LHLD    PLTNX
  972.     DAD    D
  973.     SHLD    PLTNX
  974.     RET
  975. ;
  976. MSSCY:    LHLD    T9
  977.     LDA    PLTSY
  978.     ORA    A
  979.     .JRZ    SSCY1
  980. SSCY0:    DCR    A
  981.     .JRZ    SSCY1
  982.     DAD    H
  983.     .JMPR    SSCY0
  984. SSCY1:    CALL    MSCIH
  985.     XCHG
  986.     LHLD    PLTNY
  987.     DAD    D
  988.     SHLD    PLTNY
  989.     RET
  990. ;
  991. ;[DISPLAY CONSTANTS]
  992. .IFE TRS80-1,[
  993. KPMP1=    ^H2001
  994. KPMP2=    ^H8
  995. KPMP4=    2]
  996. ;
  997. .IFE TRS80,[
  998. KPMP1=    ^H0101
  999. KPMP2=    2
  1000. KPMP4=    4]
  1001. ;
  1002. ;[POLPLT]
  1003. ;
  1004. ;Polymorphic display mode
  1005. ;
  1006. XABS=    USER4
  1007. YABS=    USER4A
  1008. XPOS=    T1
  1009. YPOS=    T2
  1010. PMPEN=    QWSD0
  1011. PMSEND=    0
  1012. PMLINL=    ^D64
  1013. PMLINH=    ^D16
  1014. ;
  1015. ;
  1016. POLPLT:    MOV    A,C
  1017.     ANI    60
  1018.     .JRZ    PMPLT
  1019. ;
  1020.     SUI    20
  1021.     STA    PMPEN
  1022. ;
  1023. ;
  1024. PMPLT:    MOV    A,C
  1025.     ANI    17
  1026.     LXI    H,XABS
  1027.     RAR
  1028.     .JRNC    PMPLTA
  1029.     INR    M
  1030. PMPLTA:    RAR
  1031.     .JRNC    PMPLTB
  1032.     DCR    M
  1033. PMPLTB:    LXI    H,YABS
  1034.     RAR
  1035.     .JRNC    PMPLTC
  1036.     INR    M
  1037. PMPLTC:    RAR
  1038.     .JRNC    PMPLTD
  1039.     DCR    M
  1040. ;
  1041. PMPLTD:    LDA    PMPEN
  1042.     TSTA
  1043.     RNZ    ; test for pen
  1044. ;
  1045. ;
  1046. PMPLT2:    LDA    YABS
  1047.     LXI    B,KPMP1
  1048.     ANI    3
  1049.     CPI    3
  1050.     .JRZ    PMPLT4
  1051.     DCR    C
  1052.     TSTA
  1053.     .JRZ    PMPLT4
  1054.     MVI    B,KPMP2
  1055.     DCR    A
  1056.     .JRZ    PMPLT4
  1057.     MVI    B,KPMP4
  1058. PMPLT4:    PUSH    B; dot code 1/2/4 or 20/8/2
  1059.     LDA    YABS
  1060.     RRC
  1061.     RRC
  1062.     ADD    C
  1063.     ANI    17
  1064.     MOV    B,A
  1065.     MVI    A,20
  1066.     SUB    B    ; origin bottom of screen
  1067.     STA    YPOS
  1068. ;
  1069.     LDA    XABS
  1070.     ANI    1
  1071.     .JRNZ    PMPLT3
  1072.     POP    PSW
  1073. .IFE TRS80,[
  1074.     RLC
  1075.     RLC
  1076.     RLC]
  1077. .IFE TRS80-1,[
  1078.     RAR]
  1079.     PUSH    PSW
  1080. PMPLT3:    LDA    XABS
  1081.     RRC
  1082.     ANI    177
  1083.     STA    XPOS
  1084. ;
  1085.     LDA    YPOS
  1086.     PUSH    PSW
  1087.     RRC
  1088.     RRC
  1089.     ANI    3
  1090.     MOV    B,A
  1091.     POP    PSW
  1092.     ANI    3
  1093.     RRC
  1094.     RRC
  1095.     MOV    C,A    ; Y is now in BC
  1096. ;
  1097.     LDA    XPOS
  1098.     ADD    C
  1099.     MOV    C,A    ; X,Y are in BC
  1100. ;
  1101.     LHLD    PMSCRN
  1102.     DAD    B
  1103. ;
  1104.     MOV    A,M
  1105.     RAL
  1106. .IFE TRS80,[
  1107.     .JRNC    PMPLT7]
  1108. .IFE TRS80-1,[
  1109.     .JRC    PMPLT7]
  1110.     MVI    M,CHLT    ; was not dots
  1111. PMPLT7:    LDA    PNF    ; test for neutral
  1112.     TSTA
  1113.     MOV    A,M    ; old bits
  1114.     POP    B
  1115. .IFE TRS80,[
  1116.     .JRNZ    PMPLT9]
  1117. .IFE TRS80-1,[
  1118.     .JRZ    PMPLT9]
  1119.     CMA
  1120.     ORA    B    ; combine new bits
  1121.     CMA
  1122.     SKIP1
  1123. PMPLT9:    ORA    B    ; remove new bits
  1124. ;
  1125. .IFE TRS80-1,[
  1126.     ORI    200]
  1127.     MOV    M,A
  1128.     RET
  1129. ;
  1130. ;
  1131. ;[CALOUT]
  1132. ;
  1133. ;
  1134. .IFG CALCOM,[
  1135. CALOUT:    MOV    A,C
  1136.     MOV    B,C
  1137.     ANI    N60
  1138.     .JRNZ    PLD35
  1139. ;
  1140.     CALL    MSPXL
  1141.     CALL    DEL25
  1142.     MVI    B,0
  1143.     CALL    MSPXL
  1144. DEL25:    MVI    B,3
  1145.     CALL    MSDLY
  1146.     RET
  1147. ;
  1148. PLD35:    CALL    MSPXL
  1149.     CALL    DEL35
  1150.     MVI    B,0
  1151.     CALL    MSPXL
  1152. DEL35:    MVI    B,43
  1153.     CALL    MSDLY
  1154.     RET
  1155. ;
  1156. ;
  1157. MSPXL:    LDA    OUTPL
  1158.     MOV    C,A
  1159.     OUTP    B    ;Z80 only
  1160.     RET
  1161. ;
  1162. ;
  1163. ;
  1164. MSDLY:
  1165. MSDLY1:    LDA    STSPL
  1166. MSDLY0:    DCR    A
  1167.     .JRNZ    MSDLY0
  1168.     .DJNZ    MSDLY1
  1169.     RET
  1170. ]
  1171. ;
  1172. ;
  1173. .IFE TRS80-1,[
  1174. ;[$250/CWC]
  1175. $250:    MTAB    CWSAF
  1176. $2501:    LINKC    $$SRA
  1177.     .JRC    $2502
  1178.     MOV    M,C
  1179.     INX    H
  1180.     MOV    A,M
  1181.     TSTA
  1182.     .JRZ    $2501
  1183. ;
  1184. $2502:    LDA    CWSAF
  1185.     STA    SYN+1
  1186.     STA    SYN1+1
  1187.     LDA    CWSEF
  1188.     STA    CPRP+1
  1189.     STA    CPRP+3
  1190.     LDA    CWCAS
  1191.     STA    CPCM+1
  1192.     RET]
  1193. ;
  1194. ;
  1195.  
  1196.     .END
  1197.