Listing of file='DRWSYM.MAC;01' on disk='vmedia/asm_utilities_macros-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; DRWSYM - DRAW A FIGURE ON THE SCREEN ; ; VALUES ON ENTRY: ; ; B,C = X,Y SCREEN CO-ORDS ; (COORDS ARE 0-63 FOR X AND 0-31 FOR Y, ; BUT OFF-SCREEN VALUES ARE HANDLED OK) ; DE => POINTER TO GRAPHICS FIGURE ; H,L = WIDTH (BYTES INC. COMPOSITE COLOR CODE), ; HEIGHT (NO. OF LINES) ; ; ALL REGISTERS DESTROYED ; EXTRN XYADDR LPS EQU 32 ;LINES PER SCREEN CPL EQU 64 ;CHARACTERS PER LINE BPL EQU 128 ;BYTES PER LINE ENTRY DRWSYM DRWSYM: MOV A,B ; ... STORE ALL THE NEEDED INFO STA XCOORD ; MOV A,H ; STA WIDTH ; MOV A,L STA HEIGHT XCHG SHLD GRPTR XCHG CALL XYADDR ;GET ADDRESS IN REFRESH RAM PUSH H SHLD CRTRAM LDA HEIGHT MOV L,A DRWS1: MOV A,C ;GO THROUGH EACH LINE OF THE FIGURE ORA A JP DRWS2 JMP DRWEND DRWS2: CPI LPS ;SEE IF OFF BOTTOM OF SCREEN JNC FIN ;AND RETURN IF TRUE LDA WIDTH ;OTHERWISE LOOK AT X-COORD RRC ;DIVIDE BY TWO ANI 7FH MOV H,A LDA XCOORD MOV B,A DRWS3: MOV A,B ;CHECK X-COORD FOR EACH CHARACTER ORA A JP DRWS6 DRWS4: XTHL ;OFF SCREEN TO LEFT, INCREMENT INX H INX H XTHL INX D INX D DRWS5: INR B ;UPDATE X-COORD DCR H ;SEE IF THIS LINE OF FIGURE FINISHED JNZ DRWS3 JMP DRWEND DRWS6: CPI CPL ;CHECK FOR OFF SCREEN TO RIGHT ... JNC DRWEND XTHL ;... IF NOT, MOVE BYTE TO REFRESH RAM. DRWS7: LDAX D MOV M,A ;MOVE THE CHARACTER INX D INX H LDAX D ;COMPOSITE COLOR CODE TOO MOV M,A DRWS8: INX D INX H XTHL JMP DRWS5 DRWEND: INR C ;GO TO NEXT LINE OF FIGURE DCR L JZ FIN ;RETURN IF NONE LEFT XTHL LHLD CRTRAM ;UPDATE REFRESH RAM ADDRESS PUSH D LXI D,BPL DAD D POP D SHLD CRTRAM XTHL PUSH H LHLD GRPTR ;UPDATE GRAPHICS POINTER LDA WIDTH MOV E,A MVI D,0 DAD D SHLD GRPTR XCHG POP H JMP DRWS1 ;REPEAT FOR THIS LINE FIN: POP H ;HL IS STARTING ADDRESS IN REFRESH RAM RET ; ; TEMPORARY STORAGE AREA ; XCOORD: DS 1 ;STARTING X-COORD OF FIGURE WIDTH: DS 1 ;NUMBER OF BYTES IN FIGURE HEIGHT: DS 1 ;NUMBER OF LINES IN FIGURE CRTRAM: DS 2 ;ADDRESS IN REFRESH RAM GRPTR: DS 2 ;POINTER TO GRAPHIC FOR FIGURE END