您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1 行
6.1KB

  1. /* 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(ÍÌËÐÏÐ); Ý

Powered by TurnKey Linux.