Added GRAPHTST.ASM
This commit is contained in:
50
src/GRAPHTST.ASM
Normal file
50
src/GRAPHTST.ASM
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
; This is a simple test program for using escape sequences.
|
||||||
|
; Defines some routines that send escape sequences to the terminal
|
||||||
|
ORG 100H ; CP/M programs start at this address
|
||||||
|
JMP START ; jump to the main entry point
|
||||||
|
; Variable storage space
|
||||||
|
MsgStr: DB 'Hello, world.',13,10,0
|
||||||
|
ClsStr: DB 27,'[2J',0
|
||||||
|
HmeStr: DB 27,'[H',0
|
||||||
|
Stack: DW 0 ; place to save the old stack
|
||||||
|
SBOT: DS 32 ; reserve a local stack
|
||||||
|
; Constants
|
||||||
|
STOP: EQU $-1 ; top of our stack
|
||||||
|
BDOS: EQU 5 ; adress of the BDOS call
|
||||||
|
; Start of code
|
||||||
|
; PRINTF: Prints a string on the screen using a BDOS function.
|
||||||
|
; The address of the string is expected to be in register HL.
|
||||||
|
PRINTF:
|
||||||
|
PRLOOP: MOV A, M ; read next char
|
||||||
|
ORA A ; check, if string has ended
|
||||||
|
JZ PREND ; if char == 0, then leave
|
||||||
|
MOV E, A ; load the char into E
|
||||||
|
MVI C, 2 ; call BDOS function id 2
|
||||||
|
PUSH H ; save the HL register
|
||||||
|
CALL BDOS ; call the BDOS function
|
||||||
|
POP H ; restore the HL register
|
||||||
|
INX H ; point to the next char
|
||||||
|
JMP PRLOOP ; do the next char
|
||||||
|
PREND: RET ; return from subroutine
|
||||||
|
; CLS: Clears the screen by printing an escape sequence
|
||||||
|
CLS: LXI H, ClsStr ; Load the escape sequence
|
||||||
|
CALL PRINTF ; print the sequence
|
||||||
|
RET ; return
|
||||||
|
; HOME: Places the cursor in the upper right corner.
|
||||||
|
HOME: LXI H, HmeStr ; Load the escape sequence
|
||||||
|
CALL PRINTF ; print the sequence
|
||||||
|
RET
|
||||||
|
; Start of the main code block
|
||||||
|
START: LXI H, 0 ; blank out HL
|
||||||
|
DAD SP ; HL = SP
|
||||||
|
SHLD Stack ; save the original stack
|
||||||
|
LXI H, STOP ; set HL to the new stack top
|
||||||
|
SPHL ; set SP to point to our new stack
|
||||||
|
CALL CLS ; clear the screen
|
||||||
|
CALL HOME ; place cursor in the top left
|
||||||
|
LXI H, MsgStr ; load the string addr into HL
|
||||||
|
CALL PRINTF ; call our self defined print routine
|
||||||
|
LHLD Stack ; load original stack addr into HL
|
||||||
|
SPHL ; restore the original stack
|
||||||
|
RET ; return control back to CP/M
|
||||||
|
END
|
||||||
Reference in New Issue
Block a user