home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol058
/
macros.sqc
/
MACROS.SRC
Wrap
Text File
|
1985-02-09
|
9KB
|
420 lines
; EQUATES
PERCUSSION EQU TRUE
SPACE EQU 20H
UP EQU '<'
DOWN EQU '>'
FLT EQU 21H
ESCAPE EQU 1BH
DOLLAR EQU 24H
; MACROS
MOVE MACRO X,Y ;; X := Y
LDA Y
STA X
ENDM
MOVI MACRO X,Y ;; X := Y
MVI A,Y
STA X
ENDM
MINC MACRO X ;; X := X + 1
LDA X
INR A
STA X
ENDM
MDEC MACRO X ;; X := X - 1
LDA X
DCR A
STA X
ENDM
MADD MACRO X,Y,W ;; X:=Y+W
LDA W
MOV B,A
LDA Y
ADD B
STA X
ENDM
MADI MACRO X,Y,W ;; X:=Y+W
LDA Y
ADI W
STA X
ENDM
MSUB MACRO X,Y,W ;; X:=Y-W
LDA W
MOV B,A
LDA Y
SUB B
STA X
ENDM
MCP MACRO X,Y ;; X : Y
LDA Y
MOV B,A
LDA X
CMP B
ENDM
MCPI MACRO X,Y ;; X : Y
LDA X
CPI Y
ENDM
MIF MACRO X,Y,W ;; IF (B) = X THEN Y
LDA X ;; (THEN GOTO W)
CMP B
JNZ $+9
CALL Y
JMP W
ENDM
MIFI MACRO X,Y,W ;; IF (B) = X THEN Y
MVI A,X ;; (THEN GOTO W)
CMP B
JNZ $+9
CALL Y
JMP W
ENDM
DMOV MACRO X,Y ;; X := Y
LHLD Y
SHLD X
ENDM
DMVI MACRO X,Y ;; X := Y
LXI H,Y
SHLD X
ENDM
DINC MACRO X ;; X := X + 1
LHLD X
INX H
SHLD X
ENDM
DDEC MACRO X ;; X := X - 1
LHLD X
DCX H
SHLD X
ENDM
DADD MACRO X,Y,W ;; X:=Y+W
LHLD W
XCHG
LHLD Y
DAD D
SHLD X
ENDM
DADI MACRO X,Y,W ;; X:=Y+W
LHLD Y
LXI D,W
DAD D
SHLD X
ENDM
DSUB MACRO X,Y,W ;; X:=Y-W
LHLD W
XCHG
LHLD Y
MOV A,L
SUB E
MOV L,A
MOV A,H
SBB D
MOV H,A
SHLD X
ENDM
DMUL MACRO X,Y,W ;; X:=Y*W
LHLD W
XCHG
LHLD Y
CALL MULTIPLY
SHLD X
ENDM
DMLI MACRO X,Y,W ;; X:=Y*W
LHLD Y
LXI D,W
CALL MULTIPLY
SHLD X
ENDM
DDIV MACRO X,Y,W ;; X:=Y/W
LHLD W
MOV B,H
MOV C,L
LHLD Y
XCHG
LXI H,0
CALL DIVIDE
XCHG
SHLD X
ENDM
DCP MACRO X,Y ;; X : Y
LHLD Y
XCHG
LHLD X
CALL CPHLDE
ENDM
DCPI MACRO X,Y ;; X:Y
LHLD X
LXI D,Y
CALL CPHLDE
ENDM
FPUSH MACRO X ;; STACK:=FP
LHLD X+2
PUSH H
LHLD X
PUSH H
ENDM
FPOP MACRO X ;; FP:=STACK
POP H
SHLD X
POP H
SHLD X+2
ENDM
FMOV MACRO X,Y ;; X:=Y
DMOV X,Y
DMOV X+2,Y+2
ENDM
FADD MACRO X,Y,W ;; X:=Y+W
FPUSH Y
FPUSH W
CALL FPFADD
FPOP X
ENDM
FSUB MACRO X,Y,W ;; X:=Y-W
FPUSH Y
FPUSH W
CALL FPFSUB
FPOP X
ENDM
FMUL MACRO X,Y,W ;; X:=Y*W
FPUSH Y
FPUSH W
CALL FPFMUL
FPOP X
ENDM
FDIV MACRO X,Y,W ;; X:=Y/W
FPUSH Y
FPUSH W
CALL FPFDIV
FPOP X
ENDM
STCP MACRO X,Y,W ;; X:Y
LXI H,Y ;; STRING
LXI D,X ;; COMPARE
MVI A,W
CALL STCMP
ENDM
STRINT MACRO X,Y ;; Y:=INT(X)
LXI H,X
CALL STR$TO$INT
SHLD Y
ENDM
INTSTR MACRO X,Y,W ;; Y:=STR(X)
LHLD X
XCHG
LXI H,Y
MVI A,W
CALL INT$TO$STR
ENDM
INTFLT MACRO X,Y ;; Y:=FLOAT(X)
LHLD X
PUSH H
CALL FPFFLOAT
FPOP Y
ENDM
FLTINT MACRO X,Y ;; Y:=TRUNC(X)
FPUSH X
CALL FPFFIX
POP H
SHLD Y
ENDM
XGET MACRO X,Y ;; A:=X[Y]
LXI D,X
LHLD Y
DAD D
MOV A,M
ENDM
XPUT MACRO X,Y ;; X[Y]:=A
LXI D,X
LHLD Y
DAD D
MOV M,A
ENDM
FCHI MACRO X,Y,W ;; FILLCHAR(X,Y,W)
LXI H,X
MVI A,W
MVI B,Y
CALL FILL$CHAR
ENDM
FCHR MACRO X,Y,W
LXI H,X
LDA Y
MOV B,A
MVI A,W
CALL FILL$CHAR
ENDM
LMVI MACRO X,Y,W ;; MOVELEFT(X,Y,W)
LXI H,X
LXI D,Y
MVI A,W
CALL MOVELEFT
ENDM
LMOV MACRO X,Y,W
LXI H,X
LXI D,Y
LDA W
CALL MOVELEFT
ENDM
NEXT MACRO X,Y,W ;; FOR..NEXT
DCP Y,W
JP $+10
INX H
SHLD Y
JMP X
ENDM
NXTI MACRO X,Y,W ;; FOR..NEXT
DCPI Y,W
JP $+10
INX H
SHLD Y
JMP X
ENDM
RESET MACRO F,X,L,M,N ;; RESET(F,X)
LXI D,F
LXI H,X
CALL FFCB
IF NOT TRS80
MOVI F+9,L
MOVI F+10,M
MOVI F+11,N
ENDIF
LXI D,F
CALL FRESET
ENDM
REWRT MACRO F,X,L,M,N ;; REWRITE(F,X)
LXI D,F
LXI H,X
CALL FFCB
IF NOT TRS80
MOVI F+9,L
MOVI F+10,M
MOVI F+11,N
ENDIF
LXI D,F
CALL FREWRT
ENDM
CLOSE MACRO F ;; CLOSE(F,LOCK)
LXI D,F
CALL FCLOS
ENDM
DELETE MACRO F,X,L,M,N ;; DELETE(F,X)
LXI D,F
LXI H,X
CALL FFCB
IF NOT TRS80
MOVI F+9,L
MOVI F+10,M
MOVI F+11,N
ENDIF
LXI D,F
CALL FDELE
ENDM
GTCH MACRO X ;; READ(X)
CALL FGTCH ;; NO ECHO
STA X
ENDM
READ MACRO X ;; READ(X)
CALL FRDCH ;; W/ ECHO
STA X
ENDM
READF MACRO F,X ;; READ(F,X)
LXI D,F
CALL FREAD
STA X
ENDM
REDLN MACRO X,Y ;; READ(X,Y)
LXI H,X ;; X=@(BUFFER)
MVI A,Y ;; Y=S(BUFFER)
CALL FRDLN
ENDM
WRITE MACRO X ;; WRITE(X)
LDA X
CALL FWTCH
ENDM
WRITF MACRO F,X ;; WRITE(F,X)
LXI D,F
LDA X
CALL FWRIT
ENDM
WRTFI MACRO F,X
LXI D,F
MVI A,X
CALL FWRIT
ENDM
SWRT MACRO F,X ;; WRITE(F,X)
LXI D,F ;; STRING
LXI H,X ;; WRITE
CALL SWRITE
ENDM
WRTLN MACRO X ;; WRITELN(X)
LXI H,X
CALL FWRTLN
ENDM
GTXY MACRO X,Y ;; GOTOXY(X,Y)
MVI B,X
MVI A,Y
CALL GOTOXY
ENDM