mirror of https://github.com/dschmenk/VM02.git
163 lines
2.5 KiB
Plaintext
Executable File
163 lines
2.5 KiB
Plaintext
Executable File
CONST SHOWGR = $C050
|
|
CONST SHOWFULL = $C052
|
|
CONST SHOWPG1 = $C054
|
|
CONST SHOWPG2 = $C055
|
|
CONST SHOWLORES = $C056
|
|
|
|
DEF TEXTMODE
|
|
DROP ^SHOWPG1
|
|
DROP ROMCALL(0, 0, 0, 0, $FB39)
|
|
END
|
|
|
|
DEF CPYBUF
|
|
; MEMCPY($0400, $0800, 1016)
|
|
END
|
|
|
|
DEF GRMODE
|
|
DROP ROMCALL(0, 0, 0, 0, $F832)
|
|
DROP ^SHOWGR
|
|
DROP ^SHOWFULL
|
|
CPYBUF
|
|
; DROP ^SHOWPG2
|
|
DROP ^SHOWLORES
|
|
END
|
|
|
|
DEF COLOR(CLR)
|
|
DROP ROMCALL(CLR, 0, 0, 0, $F864)
|
|
END
|
|
|
|
DEF PLOT(X, Y)
|
|
DROP ROMCALL(Y, 0, X, 0, $F800)
|
|
END
|
|
|
|
DEF HLIN(LEFT, RIGHT, VERT)
|
|
^$2C = RIGHT
|
|
DROP ROMCALL(VERT, 0, LEFT, 0, $F819)
|
|
END
|
|
|
|
DEF VLIN(TOP, BOTTOM, HORZ)
|
|
^$2D = BOTTOM
|
|
DROP ROMCALL(TOP, 0, HORZ, 0, $F828)
|
|
END
|
|
|
|
DEF LINE(X1, Y1, X2, Y2)
|
|
BYTE DX, DY, DX2, DY2, PP, S
|
|
WORD SX, SY, ERR, DXDY2
|
|
|
|
IF X1 < X2
|
|
SX = 1
|
|
DX = X2 - X1
|
|
ELSE
|
|
SX = -1
|
|
DX = X1 - X2
|
|
FIN
|
|
IF Y1 < Y2
|
|
SY = 1
|
|
DY = Y2 - Y1
|
|
ELSE
|
|
SY = -1
|
|
DY = Y1 - Y2
|
|
FIN
|
|
DX2 = DX << 1
|
|
DY2 = DY << 1
|
|
DXDY2 = DX2 - DY2
|
|
IF DX > DY
|
|
ERR = DX
|
|
PP = X1
|
|
IF SX < 0
|
|
FOR S = PP DOWNTO X2
|
|
IF ERR < 0
|
|
HLIN(S + 1, PP, Y1)
|
|
PP = S
|
|
ERR = ERR + DXDY2
|
|
Y1 = Y1 + SY
|
|
ELSE
|
|
ERR = ERR - DY2
|
|
FIN
|
|
NEXT
|
|
HLIN(X2, PP, Y2)
|
|
ELSE
|
|
FOR S = PP TO X2
|
|
IF ERR < 0
|
|
HLIN(PP, S - 1, Y1)
|
|
PP = S
|
|
ERR = ERR + DXDY2
|
|
Y1 = Y1 + SY
|
|
ELSE
|
|
ERR = ERR - DY2
|
|
FIN
|
|
NEXT
|
|
HLIN(PP, X2, Y2)
|
|
FIN
|
|
ELSE
|
|
ERR = -DY
|
|
PP = Y1
|
|
IF SY < 0
|
|
FOR S = PP DOWNTO Y2
|
|
IF ERR >= 0
|
|
VLIN(S + 1, PP, X1)
|
|
PP = S
|
|
ERR = ERR + DXDY2
|
|
X1 = X1 + SX
|
|
ELSE
|
|
ERR = ERR + DX2
|
|
FIN
|
|
NEXT
|
|
VLIN(Y2, PP, X2)
|
|
ELSE
|
|
FOR S = PP TO Y2
|
|
IF ERR >= 0
|
|
VLIN(PP, S - 1, X1)
|
|
PP = S
|
|
ERR = ERR + DXDY2
|
|
X1 = X1 + SX
|
|
ELSE
|
|
ERR = ERR + DX2
|
|
FIN
|
|
NEXT
|
|
VLIN(PP, Y2, X2)
|
|
FIN
|
|
FIN
|
|
END
|
|
|
|
DEF RADAR(C)
|
|
BYTE I
|
|
|
|
FOR I = 0 TO 38
|
|
COLOR(C)
|
|
LINE(20, 24, I, 0)
|
|
CPYBUF
|
|
COLOR(0)
|
|
LINE(20, 24, I, 0)
|
|
NEXT
|
|
FOR I = 0 TO 46
|
|
COLOR(C)
|
|
LINE(20, 24, 39, I)
|
|
CPYBUF
|
|
COLOR(0)
|
|
LINE(20, 24, 39, I)
|
|
NEXT
|
|
FOR I = 39 DOWNTO 1
|
|
COLOR(C)
|
|
LINE(20, 24, I, 47)
|
|
CPYBUF
|
|
COLOR(0)
|
|
LINE(20, 24, I, 47)
|
|
NEXT
|
|
FOR I = 47 DOWNTO 1
|
|
COLOR(C)
|
|
LINE(20, 24, 0, I)
|
|
CPYBUF
|
|
COLOR(0)
|
|
LINE(20, 24, 0, I)
|
|
NEXT
|
|
END
|
|
|
|
GRMODE
|
|
REPEAT
|
|
RADAR(15)
|
|
UNTIL ^$C000 > 127
|
|
DROP ^$C010
|
|
TEXTMODE
|
|
DONE
|