home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; CLIB - A COLLECTION OF MACROS & DEFINITIONS USED IN ICRT AND OTHER THINGS.
- ;
- ; ________________________________________________________________
- ; DONALD E. KILLEN VERSION 2.02 JAN 21, 1981 |
- ; -- FOR THE Z80 ONLY -- PREF. MACRO-80 |
- ; ________________________________________________________________
- ;
- .Z80
- ;
- TRUE EQU 0FFFFH ; DEFINE VALUE OF .TRUE. FOR THOSE WHO NEED IT.
- FALSE EQU NOT TRUE
- ;
- MSIZE EQU 55 ; DECIMAL KBYTES ... REQUIRED FOR SGEN.
- ;
- ;
-
-
- ;
- ; ASCII VALUES DEFINED:
- ;
- BS EQU 08H ; BACKSPACE
- LF EQU 0AH ; LINE FEED
- CR EQU 0DH ; CARRIAGE RETURN
- ;
- DEL EQU 7FH ; => DELETE CHAR. (KEY R1)
- ENQ EQU 05H ; => PHYSICAL END LINE
- NAK EQU 15H ; => DELETE LINE
- ETX EQU 03H ; => CODE + C => WARM BOOT
- SUB EQU 1AH ; => CODE + Z => END INPUT ED & PIP
- DLE EQU 10H ; => CODE + P => TOGGLE COPY TO PRINTER
- DC3 EQU 13H ; => CODE + S => START/STOP CONSOLE OUTPUT
- TAB EQU 09H ; = (HORIZ) TAB KEY.
- CODEZ EQU 1AH ; => CODE + Z SEE ABOVE
- CODES EQU 13H ; => CODE + S SEE ABOVE
- ACCENT EQU 60H ; => ` => ACCENT MARK
- TILDE EQU 7EH ; => ~ => TILDE
- UPAROW EQU 5EH ; => ^ => UP ARROW
- LBRAK EQU 5BH ; => [ => LEFT BRACKET
- RBRAK EQU 5DH ; => ] => RIGHT BRACKET
- BSLASH EQU 5CH ; => \ => BACK SLASH
- LOGOR EQU 7CH ; => | => LOGICAL INCLUSIVE OR
- LBRACE EQU 7BH ; => { => LEFT BRACE (CODE + LN PAREN.)
- RBRACE EQU 7DH ; => } => RIGHT BRACE (CODE + R. PAREN.)
- CODEX EQU 18H ; => CODE + X => DELETE LINE
- CODEP EQU 10H ; => CODE + P => TOGGLE COPY TO PRINTER
- NULL EQU 00H ; NULL - SHOULD NEVER BE ENCOUNTERED.
- ;
- ;
- ; ICRT DEFINITIONS & SUCHLIKE
- ;
- VT EQU 0BH ; VERTICAL TAB
- HT EQU 09H ; HORIZONTAL TAB
- ESC EQU 1BH ; ESCAPE CODE
- ICH EQU 40H ; INSERT CHARACTER
- CUU EQU 41H ; CURSOR UP
- CUD EQU 42H ; CURSOR DOWN
- CUF EQU 43H ; CURSOR FORWARD
- CUB EQU 44H ; CURSOR BACKWARDS
- CNL EQU 45H ; CURSOR NEXT LINE
- CPL EQU 46H ; CURSOR PRECEDING LINE
- CHA EQU 47H ; CURSOR HORIZONTAL ABSOLUTE
- CUP EQU 48H ; CURSOR POSITION
- CHT EQU 49H ; CURSOR HORIZONTAL TAB
- ED EQU 4AH ; ERASE IN DISPLAY
- EL EQU 4BH ; ERASE IN LINE
- IL EQU 4CH ; INSERT LINE
- DL EQU 4DH ; DELETE LINE
- DCH EQU 50H ; DELETE CHARACTER
- SU EQU 53H ; SCROLL UP
- SD EQU 54H ; SCROLL DOWN
- CTC EQU 57H ; CURSOR TAB CONTROL
- CVT EQU 59H ; CURSOR VERTICAL TAB
- CBT EQU 5AH ; CURSOR BACKWARDS TAB
- CVA EQU 5BH ; CURSOR VERTICAL ABSOLUTE
- SGR EQU 6DH ; SELECT GRAPHIC RENDITION
- ;
- ;
- ; VB3 ATTRIBUTE DEFINITIONS:
- ;
- NORMAL EQU 3 ; NORMAL ATTRIBUTE
- REVERSE EQU 4 ; BLACK ON WHITE
- BLANK EQU 8 ; NOTHING..
- UNDERLINE EQU 16 ; ___ EVERYTHING
- BLINK EQU 32 ; BLINK THE CHAR.
- STRIKE$THRU EQU 64 ; / THROUGH THE CHAR.
- REDUCE EQU 128 ; GREY ZONE.
- ;
- ;*** 80X33.LIB -- 80 COLUMNS BY 33 ROWS, TV STANDARDS
- ;
- ;*** HARDWARE CONFIGURATION
- ;
- ; 16 MHZ DOT CLOCK
- ; 9 DOTS PER CHARACTER
- ; 80 CHARACTER PROMS (STANDARD OR WHATEVER -- )
- ;
- ;*** DEFINE THE EQUATES NEEDED FOR THE VB3 BOARD:
- ;
- VIDEOX EQU 0E000H ;RELATIVE ADDRESS OF THE VIDEO MEMORY
- OFFSET EQU 01000H ;RELATIVE OFFSET TO THE ATTRIBUTE
- VTAC EQU 0D0H ;I/O ADDRESS OF THE (VTAC) VIDEO CONTROLLER
- KSTAT EQU 0E0H ;KEYBOARD STATUS / VB3 BOARD DISABLE PORT
- KDATA EQU 0E1H ;KEYBOARD DATA / VB3 BOARD ENABLE PORT
- ;
- NCOLS EQU 80 ;DEFINE SCREEN WIDTH
- CODE EQU 5 ; THE 'CODE' FOR 80 COLUMNS...
- NROWS EQU 33 ;DEFINE SCREEN HEIGTH (NO. LINES)
- SKEW EQU 0 ;NO SKEW BELEIVED REQUIRED --
- SCANF EQU 525 ;SCANS PER FRAME (RASTER)
- SCANR EQU 15 ;SCANS PER DATA ROW (LINE)
- HCOUNT EQU 113 ;CHARACTER TIMES IN ONE HORIZ. SCAN LINE --
- CRT5027 EQU FALSE
- CRT5037 EQU TRUE ;THIS IS THE TYPE OF VTAC USED --
- INTERLACED EQU TRUE ;WE ARE INTERLACING -----
- ;
- ;
- PUSHALL MACRO ;PUSH EVERYTHING IN THE PLACE ONTO THE STACK.
- PUSH AF
- PUSH HL
- PUSH DE
- PUSH BC
- ENDM
- ;
- POPALL MACRO ;LIKEWISE, POP EVERYTHING FROM THE STACK.
- POP BC
- POP DE
- POP HL
- POP AF
- ENDM
- ;
- ; SWIN OLD,NEW
- ;
- ; SWAP OUT WORLD, STORE STACK POINTER AT PLACCE 'OLD',
- ; GET NEW ONE FROM 'NEW', STORE REGISTERS:
- ;
- SWIN MACRO OLD,NEW
- LD (OLD),SP ; SAVE CALLER'S POINTER
- LD SP,(NEW) ; GET NEW POINTER
- PUSH AF
- PUSH HL
- PUSH DE
- PUSH BC
- ENDM
- ;
- ; SWOT OLD,NEW
- ;
- ; SWAP WORLD BACK - REVERSE OF SWIN.
- ;
- SWOT MACRO OLD2,NEW2
- POP BC
- POP DE
- POP HL
- POP AF
- LD (NEW2),SP ; SAVE THIS PROGRAM'S POINTER
- LD SP,(OLD2) ; GET THE CALLING POINTER
- ENDM
- ;
- ;
- ; STORE CURRENT SP, GET CALLING PROGRAM'S SP --
- ; PREPARATORY TO CALLING A PROGRAM KNOWN TO REQUIRE ITS
- ; OWN STACK, SUCH AS CP/M OR CBIOS.
- ;
- ; SPOT => PRIOR TO CALL, STORE OLD, GET NEW:
- ;
- ; SPOT OLDSP,TEMPNEWSP
- ;
- ; SPIN => FOLLOWING THE CALL, INVERSE:
- ;
- ; SPIN OLDSP,TEMPNEWSP ; RESTORES OWN SP
- ;
- SPOT MACRO OSP,NSP
- LD (NSP),SP
- LD SP,(OSP)
- ENDM
- ;
- SPIN MACRO OSP,NSP
- LD (OSP),SP
- LD SP,(NSP) ;; & GET OWN (NEW) SP BACK.
- ENDM
- ;
- ;
- ; STORE A REGISTER (SINGLE):
- ; -- IF USING ANY OTHER THAN -A-, THIS DESTROYS <A>.
- ;
- STORE MACRO LOC,REG
- LOCAL LABA
- LABA EQU 'A'
- IF '®' EQ LABA
- LD (LOC),A ;; STORE A.
- ELSE
- LD A,REG ;; DESTROYS <A>
- LD (LOC),A
- ENDIF
- ENDM
- ;
- ;
- ; **** ICRT-UNIQUE DEFINITIONS & MACROS ******
- ;
- ;
- ; MACRO TO DO A 16-BIT COMPARE ON THE HL REGISTER.
- ; - WORKS WITH: BC, DE, AF, IX, IY
- ;
- ; CMPD REGP ; COMPARES -HL- WITH -REGP-
- ;
- CMPD MACRO REGP
- LOCAL L1,L2,L3,L4,L5,L6,L7,CMPD1,CMPD2
- .8080
- L1 SET 'BC'
- L2 SET 'DE'
- L3 SET 'IX'
- L4 SET 'IY'
- L5 SET 'AF'
- L6 SET 'PC'
- L7 SET 'SP'
- .Z80
- ;
- IF '®P' EQ L1
- LD A,H
- CP B
- JR NZ,CMPD1
- LD A,L
- CP C
- ENDIF
- ;
- IF '®P' EQ L2
- LD A,H
- CP D
- JR NZ,CMPD1
- LD A,L
- CP E
- ENDIF
- ;
- IF '®P' EQ L3
- PUSH BC
- PUSH IX ;; PUT IX IN BC
- POP BC
- LD A,H
- CP B
- JR NZ,CMPD2 ;; MUST POP BC
- LD A,L
- CP C
- JR CMPD2 ;; MUST POP BC
- ENDIF
- ;
- IF '®P' EQ L4
- PUSH BC
- PUSH IY
- POP BC
- LD A,H
- CP B
- JR NZ,CMPD2 ;; MUST POP BC
- LD A,L
- CP C
- JR CMPD2 ;; MUST POP BC
- ENDIF
- ;
- IF '®P' EQ L5
- PUSH BC
- PUSH AF
- POP BC ;; PUT AF IN BC
- LD A,H
- CP B
- JR NZ,CMPD2 ;; MUST POP BC
- LD A,L
- CP C
- JR CMPD2 ;; MUST POP BC
- ENDIF
- ;
- IF '®P' EQ L6
- PUSH BC ;; DOING PC, SAVE BC
- CALL ZZZZ
- LD A,H
- CP B
- JR NZ,CMPD2
- LD A,L
- CP C
- JR CMPD2 ;; MUST RESTORE BC
- ;
- ZZZZ: POP BC ;; GET PC FROM STACK TO BC.
- PUSH BC ;; PUT IT BACK GOING TO
- RET ;; RETURN...
- ;
- ;
- ENDIF
- ;
- IF '®P' EQ L7
- PUSH BC
- PUSH SP
- POP BC
- LD A,H
- CP B
- JR NZ,CMPD2
- LD A,L
- CP B
- JR CMPD2 ;; SAVE BC BEFORE EXITING
- ENDIF
- ;
- IF '®P' NE L1 AND '®P' NE L2
- CMPD2: POP BC ;; RESTORE BC
- ENDIF
- CMPD1:
- ENDM
- ;
- ; MXI REGP,ROW,COL ; SETS THE 16-BIT REGISTER TO THE
- ; ; VALUE ROW*256 + COL.
- ; ; CAN NE USED WITH ANY LOADABLE PAIR.
- ;
- MXI MACRO REGP,ROW,COL
- LOCAL X,Y,Z
- .8080
- X SET ROW
- Y SET COL
- Z SET (X * 256 + Y) AND 0FFFFH
- .Z80
- LD REGP,Z
- ENDM
- ;
- ;
- ; CIJR: COMPARE (A) IMMEDIATE, AND DO A CONDITIONAL RELATIVE JUMP:
- ;
- ; CIJR DATA,CONDITION,LOCATION
- ;
- ; GENERATES:
- ;
- ; CP DATA
- ; JP CONDITION,LOCATION
- ; NOTE: NO TEST IS MADE FOR OUT-OF-RANGE CONDITIONAL JUMP.
- ; ____
- ;
- CIJR MACRO DATA,COND,PLACE
- CP DATA
- JP COND,PLACE
- ENDM
- ;
- ; DOIT: A MACRO TO PERFORM LOTS OF OTHERWISE REDUNDANT CODE IN ICRT,
- ; AND MAKE SOME TESTS AND CALL AN OPTIONAL ROUTINE.
- ;
- ; DOIT VALUE,CONDITION,ROUTINE
- ;
- DOIT MACRO VALUE,COND,ROUT
- LOCAL XX
- LD A,VALUE
- CALL GET1P ;; THIS IS AN ICRT SUBROUTINE.
- RET COND
- LD B,A
- XX: PUSH BC
- CALL ROUT
- POP BC
- DJNZ XX
- RET
- ENDM
- ;
- ;
- ; DOSP: A SPECIAL-PURPOSE MACRO TO SUPPORT ICRT:
- ;
- DOSP MACRO V1,C1,R1,R2,H2,L2,REG
- LOCAL XX1,XX2,Y,Z
- .8080
- Y SET NORMAL
- Z SET ' '
- .Z80
- ;
- LD A,V1
- CALL GET1P
- JP C1,R1 ; CONDITIONAL JUMP TO ROUTINE R1.
- PUSH HL
- CP 1
- JR NZ,XX1
- EX DE,HL
- LD H,H2 ; VALUE <H2> GOES IN REG. H
- LD L,L2 ; VALUE <L2> GOES IN REG. L
- MXI BC,Y,Z
- CALL FILLS
- JR XX2
- XX1: CP 2
- JR NZ,XX2
- LD REG,0 ; LOAD ZERO IN SPECIFIED REGISTER.
- CALL R2 ; CALL ROUTINE R2.
- XX2: POP HL
- RET
- ENDM
- ;
- ; WCTC: THIS MACRO SUPPORTS ICRT SUBROUTINES CTC0...CTC6.
- ;
- ; 'OPT' IS A BINARY QUANTUM AND MAY BE NULL OR ANY CHAR(S).
- ;
- WCTC MACRO NAM,QUAN,OPT
- ;
- IFNB <OPT>
- LD L,H
- ENDIF
- ;
- LD H,0
- LD DE,NAM
- ADD HL,DE
- LD (HL),QUAN
- RET
- ;
- ENDM
- ;
- ; GGP: THIS MACRO EXPANDS TO:
- ;
- ; LD A,QUAN
- ; CALL GET1P
- ;
- ; PLUS RET COND ; DO A CONDITIONAL RETURN IF THE CONDITION
- ; IS SPECIFIED IN THE MACRO CALL. IF IT IS NULL,
- ; DO NOT PERFORM THE RETURN.
- ;
- ;
- GGP MACRO QUAN2,COND2
- LD A,QUAN2
- CALL GET1P
- ;
- IFNB <COND2>
- RET COND2
- ENDIF
- ;
- ENDM
- ;
- ; MAPX: GENERATES A TABLE OF VIDEO LOCATIONS BASED
- ;
- ; ON VIDEOX, NCOLS, & NROWS
- ;
- MAPX MACRO
- LOCAL I,J
- .8080
- J SET (NCOLS + 15) AND 0FFF0H
- I SET 0
- ;
- REPT NROWS
- DW VIDEOX + J * I
- I SET I + 1
- ENDM
- ;
- ENDM
- .Z80
- ;
- ;
- ;
- ;
- ;
- ;
-