From 1f6fcfee17b55b6926ef50f60bd0637d271df641 Mon Sep 17 00:00:00 2001 From: Daniel Covington Date: Fri, 6 Nov 2026 18:43:02 -0500 Subject: [PATCH] vim: fix sys() for C64 (no bank arg), exit via KERNAL reset Power C on the C64 calls ML as sys(addr, &a, &x, &y); the bank argument from the manual's C128 library page made sys() jump to $000F and crash. The ML row painter now runs. Quitting resets through $FCE2 because Power C owns BASIC's zero-page pointers. Notes and Power C skill updated. Co-Authored-By: Claude Opus 5.5 --- skills/powerc/SKILL.md | 10 ++++++---- vim/NOTES.md | 17 ++++++++++++----- vim/build-ml.ps1 | 2 +- vim/mltest.c | 2 +- vim/shots/run.png | Bin 2080 -> 1683 bytes vim/vml.c | 2 +- vim/vml.pet | 2 +- vim/vscreen.c | 19 ++++++++++++------- vim/vscreen.pet | 2 +- vim/work.d81 | Bin 819200 -> 819200 bytes vim/work.stamp | 4 ++-- 11 files changed, 37 insertions(+), 23 deletions(-) diff --git a/skills/powerc/SKILL.md b/skills/powerc/SKILL.md index 336c8a4..5710380 100644 --- a/skills/powerc/SKILL.md +++ b/skills/powerc/SKILL.md @@ -193,10 +193,12 @@ Link `stdlib.l` and `syslib.l` via `^`; `math.l` by name. - Zero page `20-33`, `43-74`, `253-254` (decimal) are reserved by the system; `34-42`, `75-96`, `251-252` are scratch and safe for your ML routines. - The tape buffer `$033C-$03FB` is used by the system; do not touch it. -- Call machine code with `sys(bank, address, &a, &x, &y)` (the manual's example - uses bank 15); A/X/Y are loaded from the pointers and written back afterwards; - it returns the carry flag. Example: - `while (*s++) sys(15, 0xffd2, s, &x, &y);` prints via KERNAL CHROUT. +- Call machine code on the **C64** with `sys(address, &a, &x, &y)` -- no bank + argument. The manual's library page shows the **C128** form + `sys(bank, address, ...)` (bank 15); used on a C64 it jumps to address 15 and + warm-starts the machine (verified in VICE). A/X/Y are loaded from the + pointers and written back afterwards; it returns the carry flag. Example: + `char a, x, y; a = 147; sys(0xffd2, &a, &x, &y);` clears the screen via CHROUT. - Pass multiple args to an ML routine by declaring one `float args;` parameter so they stay contiguous, and hand the routine the address of that block in X/Y. diff --git a/vim/NOTES.md b/vim/NOTES.md index a32f0b8..ad9dbd7 100644 --- a/vim/NOTES.md +++ b/vim/NOTES.md @@ -89,11 +89,18 @@ run ## Calling machine language: sys() and the keyboard -- `sys(bank, address, &a, &x, &y)` is documented as - `int bank; unsigned address; char *aptr, *xptr, *yptr;` with `bank` from 0 to - 15 (BASIC 7 style). **Calling KERNAL GETIN through it crashed the program**; - the crash warm-starts the C64, which clears the screen, so the only evidence - was a blank blue screen and `READY.`. +- **On the C64, `sys` takes no bank: `sys(address, &a, &x, &y)`.** The + library reference page documents the C128 form `sys(bank, address, ...)` + (with "bank 15" in its example); only the C64 tutorial section ("add3" at + `$C000`) shows the four-argument call. Passing the bank makes `15` the jump + address, so the CPU runs zero page and the C64 warm-starts: blank screen and + `READY.`, no other evidence. That was the real cause of the earlier + "GETIN through sys() crashes" and of the first ML row-painter crash. +- **Do not return from `main()` to BASIC.** Power C reserves zero page 43-74 + (`$2B-$4A`), which is BASIC's program/variable pointer area, so after the + program ends BASIC runs on garbage: no `READY.`, or a mangled message such + as `UNCTIO?VER`. The editor quits with `sys(0xfce2, &a, &x, &y)` (KERNAL + reset) instead, which comes up with the banner and `READY.`. - The library's **`getchar()` is line buffered**: it echoes through the KERNAL's screen editor and only hands the characters over after RETURN. Useless for an editor. diff --git a/vim/build-ml.ps1 b/vim/build-ml.ps1 index 81d7c31..a588c15 100644 --- a/vim/build-ml.ps1 +++ b/vim/build-ml.ps1 @@ -72,7 +72,7 @@ int len, cur, rev; a = 0; x = 0; y = 0; - sys(15, (unsigned) mlcode, &a, &x, &y); + sys((unsigned) mlcode, &a, &x, &y); /* c64 form: no bank argument */ return 0; } "@ | Set-Content (Join-Path $here "vml.c") -Encoding utf8 diff --git a/vim/mltest.c b/vim/mltest.c index cad0807..dac4f22 100644 --- a/vim/mltest.c +++ b/vim/mltest.c @@ -18,7 +18,7 @@ main() y = 0; p[1] = 2; /* B: about to sys() a bare RTS */ for (;;) { } - sys(15, (unsigned) rts, &a, &x, &y); + sys((unsigned) rts, &a, &x, &y); p[2] = 3; /* C: sys + array address work */ txt[0] = 72; diff --git a/vim/shots/run.png b/vim/shots/run.png index f9165fcffa40060bc34b205fcaf6f72c480f09c6..a485291332862fcc23d9c9f1d313cd361f9e144b 100644 GIT binary patch literal 1683 zcmcIldrZ?;7`-ipRR$CZfhp4Z4~YsYj)y4%Ey^fWp@3#=yoz%h1QjS{NG*NL#i?_I zxd6+8fRzaY3LT@QEuj<^p+E{nU=n$?fVDhZwYI;~(snf&$u<|GGrP&nJ^7MzzI*R? z?su;z#1mYdcRB+AT#2#KNdUmu_UVpvvPVRmx=jF_Qi#z}r;Df7XQwGucz{nlQsR_6PD{M!GH{gO%|ijtS#9%;TFg$t%w&TLiV?pI z37~d+z{ge&wfra%jeGm>>QtOZ778NJ(yyn%aApP8e`(GM8(Lzfa^!BVB!+GDms@r= z%PR6xkk6m3Sy{3`kCR7?5v08A#oG57AxAKGwK%g$g;Xw}>AmuIhl{SPV!J*qN%bZ2 zXFzVl7Z1euMvL`R*=y@(FbrIWB6U?O?lW@v%xyhaNG<%SgnBm|HHyLABX3|7d|it@ zSU}=Tbg|Y7lUJY0XYnJ#?ulDy`tSM^z-!iA=37vEsO0&a_M}hE9KD|t@kD$o2wS^@ zZYv+p+DkzCpEvS4nJxWVFt;La6NC|JgSy*m7P${~D->&(o(eGq`43`#(r?Nbk_*C5 z2(i3wX8NFc60$@t&Y|;$4eSp${BMtvIb3Tpe!q3-@wXAm(L#aIN+cH{03LKwosr5r zFA#7C0AY8}pRkfI6SH$#ADt9=1gYDP@k-N)A5&?J;R=2u4;6QIOgHBfEa-&$T; zN?i^X59#2?e~?V6nx#f*q(o(!N8Y|aq*!2TI-sV#B8Aytqw=ihC^$piq;}RJOKZM9 zTP7(qMz?Pl%u_bde%OlD(hCnuy?kmOYP=Pf zOfhRjJv07jvntE5fh(}6`y58?Xd7QvTc9lv{K`u^BPJ2a9L|5TQr zU89SYp>;g9Q6MZW(k_##ZFg6p;|)U29K|nx-69m=k}o-umvwNk3wF9mgt<6m zG4hIeD7GIwfsVLYAi!@2#;m5Q-i}Vp#lf3W7bx`|;pX<9Yi5c-Sc_$Y)44`@$!3P; zTy+>6k%>p3eUxLaZ4wR4DA(B=#|}o!e5l!bw>w}6J>GlSAHkbpfTcz$?X6+UGk>wq z7Tj9@Zmu_pzC!$UMBkGBFE8UwHviUi``y0IDeb;!&8;ISb?U1k@c)(s(Ubh*M@SnW XXSLciUYVDBfqf7^h>vbPntAyTOWZ)K literal 2080 zcmcJQeK6E{9LK-=TU5%~u5+Z=jHGgV%9T8<-PO~Q66q9LD{?19T(WCpw@0dr8DW#G zE#z_O!IEPi&P~?YyH+Z@M{G!r^$?5Q&HC-R{%WSCrn$NA%;%rad_SM>%=hzpf8G~; zyopAJ=7sN<^#3RU_MiSvrr4bfr-ba-;`2K$ z*UHsqTeyMhW?D%gx0syN3Kmo8206hSp z`3Jyfq(542*80;pbSgPTH#a*yIv|P?OQo+CpD$Q8i(iwVxjR`>85Oy_78eyo4N_Kf z!iJ|Zr|klC=1=@uZ!~xpizL2^f*|;*5~ET_`oglwC>Gi|+?BLAq~5C5F(SH9e41d^5>9C(hdeYR3D9xx4SL5?wNE?g zyjuFuM8eaFykF>%iA#r}OPh@R@*;ZO@6E9M53E|ZNAUctb#&m^5af|7Xoim_zh<78 z__=M<-qFyOzjQn?+7;fFQC*lW&s5TGR~1+x*;B$ssgx2cdd0%>y!oaIbof8R1Ol2LK?n&>8U{(*lO4@T^9Q^pw(dUCi6qyenWqZ+BA`8B~%JfuyzdndS ze6^lxnK(>=f}SAsghytUm|5uo*z6>hkvSMQScBb3>2VPb1pzmfh}2Jg1t9jFK772I z$5RfwKzf8!)PwJZ^(J>4XaL@52?(~$$WMa#xukxG>vuuNW)3bjoOm-6Uw`OZX0>Ge zZ(7V4FLCszP~`>XL)e&nIU9c{K3M{VI;_I6B zU_?C{<^W$sS0_2S)xu>3^7vUK6e44kT0m~ks$OI~CkmZd=%eBBcDZ*PNEL@-yWPYw z1^(_QW9xgrr;ko|T^AhDh$Wx~+~zsNXf#0s#tj$JD|aU#P6JA*f75Q#+TLfXQn7RS z4T8nC1O%u1=)S_meQB+NDev441-ac}T>#u^Ix}W)hW~b!EPbCv*qvgJ;x7hFuav|f zHpHST)Q52?iPiB<&-tW(OiStp*a2Sq{efZ{R`Cc4RXZFxP<(`({#%3d6{rtjR;0Bfg`QT3Hbv4A1OX z&DL*oSJ;hbN&JWA$NbvADJ|n7aBBA<5jf+@o^mabpMhrU3y{F<IRcz$Zy@$EN#M9Q^hpJMdgH%G z$h(61bou;k6!;%qCIpgLf7SQaTF3=*{B3z~*DM~Ktpj|VfWE)4*c}q;A==6}BZPY; z)+Rp$P!)WH)8WOd>LyLi!Bqo-r%r$Z*BbSY+w0|2*Z;PFonE5KP$Zl)M8AkmlGpU5 zh5%ce57^?heX7)7sY$ksuRm^>|NZ+2Z+-dEz?Ow4Hy!(1sUm~<> 8; P[2] = LEN; P[3] = DST & 255; P[4] = DST >> 8; P[5] = CUR; P[6] = REV; A = 0; X = 0; Y = 0; SYS(15, (UNSIGNED) MLCODE, &A, &X, &Y); RETURN 0; Ý \ No newline at end of file +/* VML.C - ÇÅÎÅÒÁÔÅÄ BY BUILD-ML.PS1 FROM VROW.S. ÄO NOT EDIT BY HAND. * * ÔHE MACHINE CODE ROW PAINTER, KEPT AS A BYTE ARRAY AND CALLED IN PLACE * THROUGH SYS(). ÉT IS POSITION INDEPENDENT; ITS PARAMETERS GO THROUGH ZERO * PAGE SCRATCH $22-$28, WHICH ÐOWER Ã LEAVES TO ÍÌ ROUTINES. */ CHAR MLCODE[76] = Û 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, 255, 240, 7, 168, 177, 37, 73, 128, 145, 37, 96 Ý; /* NOTHING TO INSTALL: THE CODE RUNS WHERE THE ARRAY SITS */ MLINIT() Û RETURN 0; Ý /* PAINT THE SCREEN ROW AT 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; CHAR A, X, Y; P = (CHAR *) 0X22; P[0] = SRC & 255; P[1] = SRC >> 8; P[2] = LEN; P[3] = DST & 255; P[4] = DST >> 8; P[5] = CUR; P[6] = REV; A = 0; X = 0; Y = 0; SYS((UNSIGNED) MLCODE, &A, &X, &Y); /* C64 FORM: NO BANK ARGUMENT */ RETURN 0; Ý \ No newline at end of file diff --git a/vim/vscreen.c b/vim/vscreen.c index d1cd458..6ce3c9d 100644 --- a/vim/vscreen.c +++ b/vim/vscreen.c @@ -107,8 +107,8 @@ sinit() /* give the machine back the way basic expects it */ sdone() { - int i; char *p; + char a, x, y; p = (char *) 0xd018; *p = 0x15; @@ -116,10 +116,15 @@ sdone() *p = 14; p = (char *) 0xd021; *p = 6; - for (i = 0; i < 1000; i++) { - scr[i] = 32; - colr[i] = 1; - } + /* do not return to basic: power c owns zero page 43-74, which is where + basic keeps its program and variable pointers, so basic carries on with + garbage and prints a mangled error instead of READY. restart the + machine through the kernal reset instead - banner and READY, like + switching on. the file has been saved (or abandoned with :q!) by now. */ + a = 0; + x = 0; + y = 0; + sys(0xfce2, &a, &x, &y); /* never comes back */ return 0; } @@ -130,8 +135,8 @@ sdone() * the keyboard matrix and fills that buffer, so this gets each press as it * happens - and it also catches anything typed before the program started. * - * Two obvious alternatives do not work: calling the kernal's GETIN through - * sys() crashed the program, and the library's getchar() is line buffered - it + * (GETIN through sys() once "crashed" - but that was sys() called with the + * c128 bank argument; on the c64 it is sys(addr, &a, &x, &y).) And the library's getchar() is line buffered - it * echoes through the screen editor and only hands characters over after RETURN. */ diff --git a/vim/vscreen.pet b/vim/vscreen.pet index f2720b9..ac9d505 100644 --- a/vim/vscreen.pet +++ b/vim/vscreen.pet @@ -1 +1 @@ -/* VSCREEN.C - SCREEN AND KEYBOARD FOR THE C64 VIM CLONE. * * ÔHE EDITOR WRITES STRAIGHT INTO THE SCREEN MATRIX AT $0400 AND COLOUR RAM AT * $D800 RATHER THAN GOING THROUGH THE KERNAL, AND IT SELECTS THE LOWER/UPPER * CASE CHARACTER SET AT $1800 SO THAT PETSCII $41-$5A DRAWS AS REAL LOWERCASE. * * ÅVERYTHING HERE RETURNS INT, SO THE OTHER COMPILATION UNIT CAN CALL THESE * WITHOUT DECLARING THEM (POWER C IS Ë&Ò Ã). */ CHAR *SCR; /* SCREEN MATRIX, $0400 */ CHAR *COLR; /* COLOUR RAM, $D800 */ /* PETSCII BYTE -> SCREEN CODE */ S2V(P) INT P; Û IF (P >= 0XC0) RETURN P - 0X80; IF (P >= 0XA0) RETURN P - 0X40; IF (P >= 0X60) RETURN P - 0X20; IF (P >= 0X40) RETURN P - 0X40; RETURN P; Ý /* RAW SCREEN CODE AT ROW R, COLUMN C */ SRAW(R, C, V) INT R, C, V; Û INT I; IF (R < 0) RETURN 0; IF (R > 24) RETURN 0; IF (C < 0) RETURN 0; IF (C > 39) RETURN 0; I = R * 40 + C; SCR[I] = V; COLR[I] = 1; RETURN 0; Ý /* ONE PETSCII CHARACTER */ SPC(R, C, P) INT R, C, P; Û SRAW(R, C, S2V(P)); RETURN 0; Ý /* ONE PETSCII CHARACTER, INVERTED: THE CURSOR AND THE STATUS ROW */ SRPC(R, C, P) INT R, C, P; Û SRAW(R, C, S2V(P) + 128); RETURN 0; Ý /* A REVERSED SPACE, FOR THE CURSOR SITTING PAST THE END OF A LINE */ SBLK(R, C) INT R, C; Û SRAW(R, C, 160); RETURN 0; Ý /* A ZERO TERMINATED PETSCII STRING */ SPS(R, C, S) INT R, C; CHAR *S; Û WHILE (*S) SPC(R, C++, *S++); RETURN 0; Ý /* N BLANKS FROM (R,C) */ SCLR(R, C, N) INT R, C, N; Û WHILE (N-- > 0) SRAW(R, C++, 32); RETURN 0; Ý /* TAKE OVER THE MACHINE: BLACK ON BLUE, LOWER CASE, NO BLINKING CURSOR */ SINIT() Û INT I; CHAR *P; SCR = (CHAR *) 0X0400; COLR = (CHAR *) 0XD800; P = (CHAR *) 0XD018; *P = 0X17; P = (CHAR *) 0XD020; *P = 0; P = (CHAR *) 0XD021; *P = 6; P = (CHAR *) 0X00CC; *P = 0; P = (CHAR *) 0X0091; /* RUN/STOP FLAG: DROP WHATEVER BOOT LEFT */ *P = 0; FOR (I = 0; I < 1000; I++) Û SCR[I] = 32; COLR[I] = 1; Ý RETURN 0; Ý /* GIVE THE MACHINE BACK THE WAY BASIC EXPECTS IT */ SDONE() Û INT I; CHAR *P; P = (CHAR *) 0XD018; *P = 0X15; P = (CHAR *) 0XD020; *P = 14; P = (CHAR *) 0XD021; *P = 6; FOR (I = 0; I < 1000; I++) Û SCR[I] = 32; COLR[I] = 1; Ý RETURN 0; Ý /* ---------------------------------------------------------------- KEYBOARD * * ËEYS COME STRAIGHT OUT OF THE KERNAL'S KEYBOARD BUFFER: $C6 SAYS HOW MANY * ARE WAITING AND THEY QUEUE FROM $0277. ÔHE KERNAL'S OWN IRQ HANDLER SCANS * THE KEYBOARD MATRIX AND FILLS THAT BUFFER, SO THIS GETS EACH PRESS AS IT * HAPPENS - AND IT ALSO CATCHES ANYTHING TYPED BEFORE THE PROGRAM STARTED. * * ÔWO OBVIOUS ALTERNATIVES DO NOT WORK: CALLING THE KERNAL'S ÇÅÔÉÎ THROUGH * SYS() CRASHED THE PROGRAM, AND THE LIBRARY'S GETCHAR() IS LINE BUFFERED - IT * ECHOES THROUGH THE SCREEN EDITOR AND ONLY HANDS CHARACTERS OVER AFTER ÒÅÔÕÒÎ. */ /* NEXT KEY, OR 0 IF NONE IS WAITING */ SKEYP() Û INT N, K, I; CHAR *CNT, *BUF; CNT = (CHAR *) 0X00C6; N = *CNT; N = N & 255; IF (N == 0) RETURN 0; BUF = (CHAR *) 0X0277; K = BUF[0]; K = K & 255; FOR (I = 1; I < N; I++) BUF[I - 1] = BUF[I]; *CNT = (CHAR) (N - 1); RETURN K; Ý /* WAIT FOR A KEY */ SKEY() Û INT K; FOR (;;) Û K = SKEYP(); IF (K != 0) RETURN K; Ý Ý \ No newline at end of file +/* VSCREEN.C - SCREEN AND KEYBOARD FOR THE C64 VIM CLONE. * * ÔHE EDITOR WRITES STRAIGHT INTO THE SCREEN MATRIX AT $0400 AND COLOUR RAM AT * $D800 RATHER THAN GOING THROUGH THE KERNAL, AND IT SELECTS THE LOWER/UPPER * CASE CHARACTER SET AT $1800 SO THAT PETSCII $41-$5A DRAWS AS REAL LOWERCASE. * * ÅVERYTHING HERE RETURNS INT, SO THE OTHER COMPILATION UNIT CAN CALL THESE * WITHOUT DECLARING THEM (POWER C IS Ë&Ò Ã). */ CHAR *SCR; /* SCREEN MATRIX, $0400 */ CHAR *COLR; /* COLOUR RAM, $D800 */ /* PETSCII BYTE -> SCREEN CODE */ S2V(P) INT P; Û IF (P >= 0XC0) RETURN P - 0X80; IF (P >= 0XA0) RETURN P - 0X40; IF (P >= 0X60) RETURN P - 0X20; IF (P >= 0X40) RETURN P - 0X40; RETURN P; Ý /* RAW SCREEN CODE AT ROW R, COLUMN C */ SRAW(R, C, V) INT R, C, V; Û INT I; IF (R < 0) RETURN 0; IF (R > 24) RETURN 0; IF (C < 0) RETURN 0; IF (C > 39) RETURN 0; I = R * 40 + C; SCR[I] = V; COLR[I] = 1; RETURN 0; Ý /* ONE PETSCII CHARACTER */ SPC(R, C, P) INT R, C, P; Û SRAW(R, C, S2V(P)); RETURN 0; Ý /* ONE PETSCII CHARACTER, INVERTED: THE CURSOR AND THE STATUS ROW */ SRPC(R, C, P) INT R, C, P; Û SRAW(R, C, S2V(P) + 128); RETURN 0; Ý /* A REVERSED SPACE, FOR THE CURSOR SITTING PAST THE END OF A LINE */ SBLK(R, C) INT R, C; Û SRAW(R, C, 160); RETURN 0; Ý /* A ZERO TERMINATED PETSCII STRING */ SPS(R, C, S) INT R, C; CHAR *S; Û WHILE (*S) SPC(R, C++, *S++); RETURN 0; Ý /* N BLANKS FROM (R,C) */ SCLR(R, C, N) INT R, C, N; Û WHILE (N-- > 0) SRAW(R, C++, 32); RETURN 0; Ý /* TAKE OVER THE MACHINE: BLACK ON BLUE, LOWER CASE, NO BLINKING CURSOR */ SINIT() Û INT I; CHAR *P; SCR = (CHAR *) 0X0400; COLR = (CHAR *) 0XD800; P = (CHAR *) 0XD018; *P = 0X17; P = (CHAR *) 0XD020; *P = 0; P = (CHAR *) 0XD021; *P = 6; P = (CHAR *) 0X00CC; *P = 0; P = (CHAR *) 0X0091; /* RUN/STOP FLAG: DROP WHATEVER BOOT LEFT */ *P = 0; FOR (I = 0; I < 1000; I++) Û SCR[I] = 32; COLR[I] = 1; Ý RETURN 0; Ý /* GIVE THE MACHINE BACK THE WAY BASIC EXPECTS IT */ SDONE() Û CHAR *P; CHAR A, X, Y; P = (CHAR *) 0XD018; *P = 0X15; P = (CHAR *) 0XD020; *P = 14; P = (CHAR *) 0XD021; *P = 6; /* DO NOT RETURN TO BASIC: POWER C OWNS ZERO PAGE 43-74, WHICH IS WHERE BASIC KEEPS ITS PROGRAM AND VARIABLE POINTERS, SO BASIC CARRIES ON WITH GARBAGE AND PRINTS A MANGLED ERROR INSTEAD OF ÒÅÁÄÙ. RESTART THE MACHINE THROUGH THE KERNAL RESET INSTEAD - BANNER AND ÒÅÁÄÙ, LIKE SWITCHING ON. THE FILE HAS BEEN SAVED (OR ABANDONED WITH :Q!) BY NOW. */ A = 0; X = 0; Y = 0; SYS(0XFCE2, &A, &X, &Y); /* NEVER COMES BACK */ RETURN 0; Ý /* ---------------------------------------------------------------- KEYBOARD * * ËEYS COME STRAIGHT OUT OF THE KERNAL'S KEYBOARD BUFFER: $C6 SAYS HOW MANY * ARE WAITING AND THEY QUEUE FROM $0277. ÔHE KERNAL'S OWN IRQ HANDLER SCANS * THE KEYBOARD MATRIX AND FILLS THAT BUFFER, SO THIS GETS EACH PRESS AS IT * HAPPENS - AND IT ALSO CATCHES ANYTHING TYPED BEFORE THE PROGRAM STARTED. * * (ÇÅÔÉÎ THROUGH SYS() ONCE "CRASHED" - BUT THAT WAS SYS() CALLED WITH THE * C128 BANK ARGUMENT; ON THE C64 IT IS SYS(ADDR, &A, &X, &Y).) ÁND THE LIBRARY'S GETCHAR() IS LINE BUFFERED - IT * ECHOES THROUGH THE SCREEN EDITOR AND ONLY HANDS CHARACTERS OVER AFTER ÒÅÔÕÒÎ. */ /* NEXT KEY, OR 0 IF NONE IS WAITING */ SKEYP() Û INT N, K, I; CHAR *CNT, *BUF; CNT = (CHAR *) 0X00C6; N = *CNT; N = N & 255; IF (N == 0) RETURN 0; BUF = (CHAR *) 0X0277; K = BUF[0]; K = K & 255; FOR (I = 1; I < N; I++) BUF[I - 1] = BUF[I]; *CNT = (CHAR) (N - 1); RETURN K; Ý /* WAIT FOR A KEY */ SKEY() Û INT K; FOR (;;) Û K = SKEYP(); IF (K != 0) RETURN K; Ý Ý \ No newline at end of file diff --git a/vim/work.d81 b/vim/work.d81 index 62109cd208741e37327c96b8ef11a6db2964746a..54aa2f5c9a6c5d8af008c4320425e533d5b57653 100644 GIT binary patch delta 13049 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 delta 6468 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 diff --git a/vim/work.stamp b/vim/work.stamp index 5eb49e8..314456f 100644 --- a/vim/work.stamp +++ b/vim/work.stamp @@ -1,6 +1,6 @@ vim=8E13FCED4A0CAFD92855B9281D268368 -vscreen=FFCDAD177DF3AD43CE2809EA7ACD6029 +vscreen=7773151D0C575F00E919F19875CB498F vview=F3C7D092B8080C956D9EBD7B95800CD5 mltest=E4BDE10600DE08AF766FFB32A6D9A3E5 vedit=8BE6C95F2BDA01EC535A8C51CD666881 -vml=D600B54B6821800D24B2986D920E9B12 +vml=B9A7F164619D4675A2E78B48F02C179D