; SUBROUTINE TO CONVERT SCREEN COORDINATES ; ENTRY: (DE) = Y,X COORDINATES OF POINT. ; X = 0 TO 127, Y = 0 TO 47 (128 X 48 = 6144 bytes). ; CALL SET ; SETS POINT. ; CALL RESET ; RESETS POINT. ; CALL TEST ; TESTS POINT, RETURNS Z FLAG. ; EXIT: (A THROUGH L) = DESTROYED. ; Z FLAG SET IF TEST. .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. SET: LD A, 0C6h ; SET B, (HL) INSTRUCTION. JR TEST10 ; GO TO STORE. RESET: LD A, 86h ; RESTORE B, (HL) INSTRUCTION. JR TEST10 ; GO TO STORE. TEST: LD A, 46h ; BIT B, (HL) INSTRUCTION. TEST10: LD (INST+1), A ; STORE 2ND BYTE. ADDRES: LD A, D ; GET Y. LD B, 0FFh ; -1. LOOP: INC B ; SUCCESSIVE SUBTRACTS FOR DIVISION. SUB 3 ; BY THREE. JP P, LOOP ; GO IF NOT MINUS. ADD A, 3 ; YQ IN B, YR IN A. SLA A ; YR * 2. LD C, A ; SAVE YR * 2. LD L, B ; YQ TO L. LD H, 0 ; YQ IN HL. LD B, 6 ; COUNT FOR MULTIPLY BY 64. LOOP1: ADD HL, HL ; YQ * 2. DJNZ LOOP1 ; GO IF NOT YQ * 64. LD D, 0 ; DE NOW HAS X. SRL E ; XQ. JR NC, CONT ; GO IF XR NE 1. INC C ; C NOW HAS YR * 2 + XR. CONT: ADD HL, DE ; HL NOW HAS YQ * 2 + XQ. LD DE, 3C00h ; START OF DISPLAY. ADD HL, DE ; HL NOW HAS DISPLACEMENT. SLA C ; ALIGN TO FIELD. SLA C SLA C LD A, (INST + 1) ; GET INSTRUCTION. ADD A, C ; SET FIELD. LD (INST + 1), A ; STORE. INST: .DB 0CBh ; PERFORM BIT, SET, RESET. .DB 0 ; WILL BE FILLED IN. SET 7, (HL) ; FOR GRAPHICS. RET .END