|
- /* VML.C - ÇÅÎÅÒÁÔÅÄ BY BUILD-ML.PS1 FROM VML.S AND VMLWRAP.C. ÄO NOT EDIT.
*
* ÔHE MACHINE CODE HELPERS AS A BYTE ARRAY. MLINIT() COPIES THEM TO $Ã000.
*/
#DEFINE ÍÌÂÍÏÖÅ 0XC161
#DEFINE ÍÌËÐÏÐ 0XC237
#DEFINE ÍÌÌÁÄÊ 0XC1E3
#DEFINE ÍÌÒÏ× 0XC102
#DEFINE ÍÌÓÃÒÎ 0XC000
#DEFINE ÍÌÓÉÚÅ 660
CHAR MLCODE[660] = Û
32, 86, 194, 162, 15, 189, 0, 196, 149, 75, 202, 16,
248, 24, 165, 81, 101, 89, 133, 91, 165, 82, 105, 0,
133, 92, 165, 91, 10, 133, 93, 165, 92, 42, 133, 94,
24, 165, 93, 101, 77, 133, 93, 165, 94, 101, 78, 133,
94, 169, 0, 133, 37, 169, 4, 133, 38, 166, 89, 240,
14, 24, 165, 37, 105, 40, 133, 37, 144, 2, 230, 38,
202, 208, 242, 165, 89, 133, 95, 169, 0, 133, 40, 133,
36, 169, 255, 133, 39, 165, 91, 197, 79, 165, 92, 229,
80, 176, 114, 160, 0, 177, 93, 133, 251, 200, 177, 93,
133, 252, 24, 165, 91, 105, 1, 170, 165, 92, 105, 0,
228, 79, 208, 15, 197, 80, 208, 11, 165, 83, 133, 41,
165, 84, 133, 42, 76, 155, 192, 160, 2, 177, 93, 56,
233, 1, 133, 41, 200, 177, 93, 233, 0, 133, 42, 24,
165, 251, 101, 85, 133, 251, 165, 252, 101, 86, 133, 252,
56, 165, 41, 229, 251, 170, 165, 42, 229, 252, 144, 10,
208, 4, 224, 41, 144, 2, 162, 40, 134, 36, 24, 165,
75, 101, 251, 133, 34, 165, 76, 101, 252, 133, 35, 165,
95, 197, 87, 208, 4, 165, 88, 133, 39, 32, 21, 193,
165, 95, 197, 90, 176, 33, 230, 95, 230, 91, 208, 2,
230, 92, 24, 165, 93, 105, 2, 133, 93, 144, 2, 230,
94, 24, 165, 37, 105, 40, 133, 37, 144, 2, 230, 38,
76, 79, 192, 76, 117, 194, 32, 86, 194, 162, 6, 189,
0, 196, 149, 34, 202, 16, 248, 32, 21, 193, 76, 117,
194, 165, 40, 9, 32, 160, 39, 145, 37, 136, 16, 251,
160, 0, 196, 36, 240, 45, 177, 34, 201, 32, 176, 2,
169, 32, 201, 192, 144, 4, 233, 128, 176, 22, 201, 160,
144, 4, 233, 64, 176, 14, 201, 96, 144, 4, 233, 32,
176, 6, 201, 64, 144, 2, 233, 64, 5, 40, 145, 37,
200, 208, 207, 165, 39, 201, 40, 176, 7, 168, 177, 37,
73, 128, 145, 37, 96, 32, 86, 194, 173, 0, 196, 133,
34, 173, 1, 196, 133, 35, 173, 2, 196, 133, 37, 173,
3, 196, 133, 38, 173, 4, 196, 133, 75, 173, 5, 196,
133, 76, 165, 37, 197, 34, 165, 38, 229, 35, 144, 52,
24, 165, 35, 101, 76, 133, 35, 24, 165, 38, 101, 76,
133, 38, 164, 75, 240, 9, 136, 177, 34, 145, 37, 192,
0, 208, 247, 166, 76, 240, 18, 198, 35, 198, 38, 160,
0, 136, 177, 34, 145, 37, 192, 0, 208, 247, 202, 208,
238, 76, 117, 194, 160, 0, 166, 76, 240, 14, 177, 34,
145, 37, 200, 208, 249, 230, 35, 230, 38, 202, 208, 242,
166, 75, 240, 229, 177, 34, 145, 37, 200, 202, 208, 248,
76, 117, 194, 32, 86, 194, 162, 5, 189, 0, 196, 149,
75, 202, 16, 248, 165, 75, 133, 34, 165, 76, 133, 35,
165, 77, 133, 75, 165, 78, 133, 76, 165, 79, 133, 77,
165, 80, 133, 78, 165, 75, 5, 76, 240, 38, 160, 0,
24, 177, 34, 101, 77, 145, 34, 200, 177, 34, 101, 78,
145, 34, 24, 165, 34, 105, 2, 133, 34, 144, 2, 230,
35, 165, 75, 208, 2, 198, 76, 198, 75, 76, 8, 194,
76, 117, 194, 120, 165, 198, 240, 22, 162, 0, 173, 119,
2, 72, 189, 120, 2, 157, 119, 2, 232, 224, 9, 208,
245, 198, 198, 104, 88, 96, 88, 169, 0, 96, 162, 8,
181, 34, 157, 16, 196, 202, 16, 248, 162, 21, 181, 75,
157, 25, 196, 202, 16, 248, 165, 251, 141, 47, 196, 165,
252, 141, 48, 196, 96, 162, 8, 189, 16, 196, 149, 34,
202, 16, 248, 162, 21, 189, 25, 196, 149, 75, 202, 16,
248, 173, 47, 196, 133, 251, 173, 48, 196, 133, 252, 96
Ý;
/* VMLWRAP.C - THE Ã SIDE OF THE MACHINE CODE HELPERS. BUILD-ML.PS1 APPENDS
* THIS TO THE GENERATED BYTE ARRAY TO MAKE VML.C; EDIT IT HERE.
*
* ÐARAMETERS GO THROUGH A BLOCK AT $C400 (NOT $CF00: THE Ã STACK LIVES JUST BELOW $D000), THEN SYS() JUMPS TO THE ENTRY.
* ÏN THE C64 SYS() TAKES NO BANK ARGUMENT: SYS(ADDR, &A, &X, &Y).
*/
EXTERN CHAR *BFR;
EXTERN UNSIGNED BLEN;
EXTERN UNSIGNED LPTR[];
EXTERN INT NLINES, TOP, LEFTCOL;
/* MOVE THE CODE TO $C000 AND KEEP POWER C'S HEAP AND STACK BELOW IT.
MUST RUN BEFORE MALLOC() */
MLINIT()
Û
CHAR *D;
INT I;
HIGHMEM(0XC000);
D = (CHAR *) 0XC000;
FOR (I = 0; I < ÍÌÓÉÚÅ; I++) D[I] = MLCODE[I];
RETURN 0;
Ý
/* CALL AN ENTRY, RETURN WHAT IT LEFT IN Á */
MLGO(ADDR)
UNSIGNED ADDR;
Û
CHAR A, X, Y;
A = 0;
X = 0;
Y = 0;
SYS(ADDR, &A, &X, &Y);
RETURN A & 255;
Ý
/* ÔHE WRAPPERS FILL THE PARAMETER BLOCK THROUGH ONE POINTER INSTEAD OF
CALLING A HELPER PER FIELD: EVERY POWER C FUNCTION CALL COSTS A LOT, AND
MLSCR RUNS ON EVERY KEY. ×ORDS ARE STORED LOW BYTE FIRST. */
/* PAINT ONE ROW AT SCREEN ADDRESS DST: LEN BYTES FROM SRC, CURSOR AT COLUMN
CUR (255 = NONE), REV = 128 FOR AN ALL REVERSE ROW */
MLROW(SRC, LEN, DST, CUR, REV)
UNSIGNED SRC, DST;
INT LEN, CUR, REV;
Û
CHAR *P;
P = (CHAR *) 0XC400;
P[0] = SRC;
P[1] = SRC >> 8;
P[2] = LEN;
P[3] = DST;
P[4] = DST >> 8;
P[5] = CUR;
P[6] = REV;
MLGO(ÍÌÒÏ×);
RETURN 0;
Ý
/* PAINT SCREEN ROWS R0..R1 FROM THE BUFFER; THE CURSOR SITS AT SCREEN ROW
CROW (255 = NONE), COLUMN CCOL */
MLSCR(R0, R1, CROW, CCOL)
INT R0, R1, CROW, CCOL;
Û
CHAR *P;
UNSIGNED V;
P = (CHAR *) 0XC400;
V = (UNSIGNED) BFR;
P[0] = V;
P[1] = V >> 8;
V = (UNSIGNED) LPTR;
P[2] = V;
P[3] = V >> 8;
P[4] = NLINES;
P[5] = NLINES >> 8;
P[6] = TOP;
P[7] = TOP >> 8;
P[8] = BLEN;
P[9] = BLEN >> 8;
P[10] = LEFTCOL;
P[11] = LEFTCOL >> 8;
P[12] = CROW;
P[13] = CCOL;
P[14] = R0;
P[15] = R1;
MLGO(ÍÌÓÃÒÎ);
RETURN 0;
Ý
/* MEMMOVE: N BYTES FROM 'FROM' TO 'TO', OVERLAP SAFE */
MLMOVE(FROM, TO, N)
UNSIGNED FROM, TO, N;
Û
CHAR *P;
IF (N == 0) RETURN 0;
P = (CHAR *) 0XC400;
P[0] = FROM;
P[1] = FROM >> 8;
P[2] = TO;
P[3] = TO >> 8;
P[4] = N;
P[5] = N >> 8;
MLGO(ÍÌÂÍÏÖÅ);
RETURN 0;
Ý
/* ADD D TO N WORDS STARTING AT ADDRESS A (LINE INDEX FIX-UPS) */
MLADJ(A, N, D)
UNSIGNED A, N, D;
Û
CHAR *P;
IF (N == 0) RETURN 0;
P = (CHAR *) 0XC400;
P[0] = A;
P[1] = A >> 8;
P[2] = N;
P[3] = N >> 8;
P[4] = D;
P[5] = D >> 8;
MLGO(ÍÌÌÁÄÊ);
RETURN 0;
Ý
/* NEXT KEY FROM THE KERNAL BUFFER, OR 0 */
MLKEY()
Û
RETURN MLGO(ÍÌËÐÏÐ);
Ý
|