Files
TZFS/asm/mz-xz009/PLT.ASM

755 lines
15 KiB
NASM

; -----------------------------
; MZ-800 BASIC Plotter package
; FI:PLT ver 1.0A 8.25.84
; Programed by T.Miho
; -----------------------------
;
INCLD MACRO
;
P.PLT: EQU 0
PNCHNM: DEFB "N" ;N,S,L
;
NEWON: ENT
LD BC,ER59'
LD DE,NEWONT ;NEW ON
NEWON2: LD A,(DE) ; omit plotter
INC DE
ADD A,A
JR Z,NEWON4
LD HL,SJPTBL
CALL ADDHLA
LD M,C
INC HL
LD M,B
JR NEWON2
NEWON4: XOR A ; PLOT OFF
LD (INPFLG),A
LD A,(PNMODE)
DEC A
CALL NZ,MODETX ; PMODE TX
LD HL,NEWAD2
NEWON9: LD (TEXTST),HL
RET
SKP H
;
NEWONT: DEFB A2H ;PMODE
DEFB A3H ;PSKIP
DEFB A4H ;PLOT
DEFB A5H ;PLINE
DEFB A6H ;RLINE
DEFB A7H ;PMOVE
DEFB A8H ;RMOVE
DEFB AEH ;PCOLOR
DEFB AFH ;PHOME
DEFB B0H ;HSET
DEFB B1H ;GPRINT
DEFB B3H ;AXIS
DEFB BBH ;PCIRCLE
DEFB BCH ;PTEST
DEFB BDH ;PAGE
DEFB 0
;
LPTTMD: ENT
LD B,1 ;Check text mode
JR +4
LPTGMD: ENT
LD B,2 ;Check graph mode
LD A,(PNMODE)
CP B
RET Z
JP LPTMER
;
SKP H
;
NEWAD2: ENT
;
MODE: ENT
CALL MODE0 ;"PMODE" command
XOR A
LD (LPOSB),A ;LPT TAB
RET
;
MODE0: LD A,(INPFLG)
OR A
JP NZ,LPTMER
CALL PPCHCK
TEST1 "G"
CALL TEST1
DEFB "G"
ENDM
JP Z,PGRAPH
TESTX "T"
CALL TESTX
DEFB "T"
ENDM
TEST1 "N"
CALL TEST1
DEFB "N"
ENDM
JR Z,TEXTN
TEST1 "L"
CALL TEST1
DEFB "L"
ENDM
JR Z,TEXTN
TESTX "S"
CALL TESTX
DEFB "S"
ENDM
TEXTN: LD (PNCHNM),A
CALL ENDZ
CALL OUTA3H
MODETX: LD A,1
LD (PNMODE),A
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD A,(PNCHNM)
CP "N"
RET Z
CP "L"
LD A,0BH
JR Z,XLPTOT
T80CH: LD A,9
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
XLPTOT: SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
RET
;
OUTA3H: LD A,0AH
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD A,3
JR XLPTOT
;
PGRAPH: INC HL ;Graphic mode
CALL ENDZ
LD A,2
LD (PNMODE),A
JR XLPTOT
SKP H
;
SKIP: ENT
CALL PPCHCK
CALL LPTTMD ;SKIP n
CALL IDEEXP
LD A,E
OR A
RET Z
CP -20
JR NC,SKIPPS
CP 21
JP NC,ER03
SKIPPS: CALL ENDZ
BIT 7,E
JR NZ,SKIPD
SKIPI: LD A,0AH
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
DEC E
JR NZ,SKIPI
RET
;
SKIPD: LD A,03H
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
INC E
JR NZ,SKIPD
RET
;
PNMX99: PUSH HL
LD HL,999
JR +6
PNMX48: PUSH HL
LD HL,480
PUSH HL
ADD HL,DE
POP HL
JR C,PNMX2
SBC HL,DE
JP C,ER03
PNMX2: POP HL
RET
SKP H
;
PLINE: ENT ; PLINE %n,x,y
LD C,"D"
DEFB 11H
RLINE: ENT ; RLINE %n,x,y"
LD C,"J"
DEFB 11H
PMOVE: ENT ; PMOVE x,y
LD C,"M"
DEFB 11H
RMOVE: ENT ; RMOVE x,y
LD C,"R"
CALL PPCHCK
CALL LPTGMD
LD A,C
LD (LINEC+1),A
CP "M"
JR NC,LINE5 ;"M","R"
TEST1 "%"
CALL TEST1
DEFB "%"
ENDM
JR NZ,LINE5
CALL IBYTE
LD A,E
DEC A
CP 16
JP NC,ER03
DEC DE
LD A,"L"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
CALL NUMPLT
CALL LPTCR
CALL ENDCHK
RET Z
CALL CH2CH
LINE5: CALL IDEEXP
CALL CH2CH
CALL PNMX48
PUSH DE
CALL IDEEXP
CP ","
JR Z,LINEXY
CALL ENDZ
LINEXY: CALL PNMX99
POP BC
PUSH DE
LINEC: LD A,0 ;Plotter command
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD E,C
LD D,B
CALL NUMPLT ;X
CALL LPTCOM
POP DE
CALL NUMPLT ;Y
CALL LPTCR
CALL ENDCHK
RET Z
INC HL
JR LINE5
SKP H
;
PCOLOR: ENT
CALL PPCHCK
CALL IBYTE ;PCOLOR n
LD A,E
CP 4
JP NC,ER03
CALL ENDZ
LD A,(PNMODE)
CP 2
JR Z,PNMBR2
CALL OUTA3H
LD A,2
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
CALL PNMBR2
JP PRTTX
;
PNMBR2: LD A,"C"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD A,E
OR 30H
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LPTCR: LD A,0DH
JR +4
LPTCOM: LD A,","
YLPTOT: SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
RET
;
PHOME: ENT
LD C,"H"
DEFB 11H
HSET: ENT
LD C,"I"
CALL LPTGMD ;PHOME / HSET
CALL ENDZ
LD A,C
JR YLPTOT
;
SKP H
;
GPRINT: ENT
CALL PPCHCK
CALL LPTGMD ;GPRINT [n,s],x$
TEST1 "["
CALL TEST1
DEFB "["
ENDM
JR NZ,SYMBL2
CALL IBYTE
CP 64
JP NC,ER03
PUSH DE
CALL HCH2CH
CALL IBYTE
CP 4
JP NC,ER03
PUSH DE
TESTX "]"
CALL TESTX
DEFB "]"
ENDM
POP BC
POP DE
PUSH BC
LD A,"S"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
CALL NUMPLT
CALL LPTCOM
POP DE
LD A,"Q"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
CALL NUMPLT
CALL LPTCR
CALL ENDCHK
RET Z
CALL CH2CH
SYMBL2: CALL STREXP
CALL ENDCHK
JR Z,SYMBL5
CALL CH2CH
DEC HL
SYMBL5: LD A,B
OR A
JR Z,SYMBL4
LD A,"P"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
SYMBL3: LD A,(DE)
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
INC DE
DJNZ SYMBL3
CALL LPTCR
SYMBL4: CALL ENDCHK
RET Z
INC HL
JR SYMBL2
SKP H
;
AXIS: ENT
CALL LPTGMD ;AXIS x,p,r
CALL IBYTE
CP 2
JP NC,ER03
PUSH AF
CALL HCH2CH
CALL IDEEXP
PUSH DE
CALL CH2CH
CALL IBYTE
OR A
JP Z,ER03
CALL ENDZ
LD A,"X"
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
POP BC
POP AF
PUSH DE
PUSH BC
OR 30H
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
CALL LPTCOM
POP DE
CALL PNMX99
CALL NUMPLT
CALL LPTCOM
POP DE
CALL NUMPLT
JP LPTCR
SKP H
;
PCIRCLE:ENT
CALL LPTGMD ;PCIRCLE x,y,r,s,e,d
PUSH HL
LD DE,0
LD HL,CRS
CALL FLTHEX
LD DE,360
LD HL,CRE
CALL FLTHEX
LD HL,FLTEN
LD DE,CRTEN
CALL LDIR5
POP HL
CALL EXPR ;X
CALL CH2CH
PUSH HL
LD HL,CRX
EX DE,HL
CALL LDIR5
POP HL
CALL EXPR ;Y
CALL CH2CH
PUSH HL
LD HL,CRY
EX DE,HL
CALL LDIR5
POP HL
CALL EXPR ;R
PUSH HL
PUSH AF
LD HL,CRR
EX DE,HL
CALL LDIR5
LD A,(CRR+1)
RLCA
JP C,ER03
POP AF
CP ","
JR NZ,CIREND
POP HL
INC HL
CALL EXPR ;S
PUSH HL
PUSH AF
LD HL,CRS
EX DE,HL
CALL LDIR5
POP AF
CP ","
JR NZ,CIREND
POP HL
INC HL
CALL EXPR ;E
PUSH HL
PUSH AF
LD HL,CRE
EX DE,HL
CALL LDIR5
POP AF
CP ","
JR NZ,CIREND
POP HL
INC HL
CALL EXPR ;D
PUSH HL
LD HL,CRTEN
EX DE,HL
CALL LDIR5
LD A,(CRTEN+1)
RLCA
JP C,ER03
CIREND:
POP HL
CALL ENDZ
PUSH HL
;
LD HL,CRE
LD DE,CRS
LD A,(CRTEN)
OR A
CALL NZ,CMP
JP C,ER03
;
CALL CRXYRS ;CAL X,Y
;
LD HL,CRXX ;MOVE X,Y
LD (CRMOVX+1),HL
LD HL,CRYY
LD (CRMOVY+1),HL
CALL CRMOVE
LD A,(CRTEN)
OR A
JR Z,CREDLI
;
CRCLP: LD HL,CRS ;S+D
LD DE,CRTEN
CALL ADD
LD DE,CRE
CALL CMP
JR NC,EDLINE
CALL CRXYRS
CALL CRLINE
;
SVC .BREAK
RST 3
DEFB .BREAK
ENDM
JR NZ,CRCLP
;
POP HL
RET
;
EDLINE: CALL CREDST
CALL CRLINE
POP HL
RET
;
CREDST: LD HL,CRE
LD DE,CRS
LD BC,5
LDIR
JR CRXYRS
;
CREDLI: LD HL,CRX
LD (CRMOVX+1),HL
LD HL,CRY
LD (CRMOVY+1),HL
CALL CRLINE
CALL CREDST
LD HL,CRXX
LD (CRMOVX+1),HL
LD HL,CRYY
LD (CRMOVY+1),HL
CALL CRLINE
POP HL
RET
;
CRLINE: LD A,"D"
DEFB 21H
CRMOVE: LD A,"M"
PUSH AF
CRMOVX: LD HL,CRX
CALL HLFLT
PUSH HL
EX DE,HL
CALL PNMX99
CRMOVY: LD HL,CRY
CALL HLFLT
PUSH HL
EX DE,HL
CALL PNMX99
POP HL
POP DE
POP AF
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
PUSH HL
CALL NUMPLT
CALL LPTCOM
POP DE
CALL NUMPLT
JP LPTCR
;
CRXYRS: LD DE,(INTFAC)
LD HL,CRS
CALL LDIR5
LD HL,(INTFAC)
CALL RAD
CALL COS
LD DE,CRR
CALL MUL
LD DE,CRX
CALL ADD
LD DE,CRXX
CALL LDIR5
LD DE,(INTFAC)
LD HL,CRS
CALL LDIR5
LD HL,(INTFAC)
CALL RAD
CALL SIN
LD DE,CRR
CALL MUL
LD DE,CRY
CALL ADD
LD DE,CRYY
JP LDIR5
;
CRX: DEFS 5
CRY: DEFS 5
CRR: DEFS 5
CRS: DEFS 5
CRE: DEFS 5
CRTEN: DEFS 5
CRXX: DEFS 5
CRYY: DEFS 5
DEFS 5
;
;
;
NUMPLT: PUSH AF
PUSH HL
LD HL,(INTFAC)
CALL FLTHEX
CALL CVNMFL
SVC .COUNT
RST 3
DEFB .COUNT
ENDM
NUMPL2: LD A,(DE)
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
INC DE
DJNZ NUMPL2
POP HL
POP AF
RET
;
SKP H
;
TEST: ENT
CALL PPCHCK
CALL LPTTMD ;TEST command
CALL ENDZ
LD A,04H
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
RET
;
PAGE: ENT
CALL LPTTMD ;PAGE n
CALL IDEEXP
LD A,E
OR A
JP Z,ER03
CP 73
JP NC,ER03
CALL ENDZ
LD A,9
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD A,(PSEL)
BIT P.PLT,A
JR Z,PAGE2
CALL NUMPLT ;Plotter only
JP LPTCR
PAGE2: LD A,E ;Except plotter
LD DE,KEYBUF
CALL HEXACC
DEC DE
DEC DE
LD A,(DE)
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
INC DE
LD A,(DE)
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
RET
;
PLOT: ENT
LD A,M
CP 9DH ;PLOT ON/OFF
JR Z,PLOTO'
CP A1H ;OFF
JP NZ,ER01
XOR A
PLOTOK: LD (INPFLG),A
INC HL
RET
PLOTO': CALL LPTTMD
CALL PPCHCK
LD A,(PNCHNM)
CP "L"
JP Z,LPTMER
CALL PRTTX
PL40C: LD A,(INPFLG)
OR A
JR NZ,PLOTOK
CALL CONSOI
LD A,16H
SVC .CRT1C
RST 3
DEFB .CRT1C
ENDM
OR 01H
JR PLOTOK
;
PRTTX: LD A,1
SVC .LPTOT
RST 3
DEFB .LPTOT
ENDM
LD A,(CRTMD2)
CP 3
RET C
CALL T80CH
RET
;
PPCHCK: LD A,(PSEL)
BIT P.PLT,A ;if not plotter
JP Z,LPTMER ; then err
RET
;
NEWAD0: ENT
;
END