; ------------------------------------------------------------------ log ; The game as it is played, a record at a time, for whatever reads the ; Spectrum's memory from outside: each new record is written at LOGREC, ; over the last, and LOGSEQ counts them. A reader catches each as it is ; made (the website stops its Spectrum at lnew, where each is complete, ; and writes the games out as a match file). Nothing in the game reads ; them. ; ; The records, s the side (0 the player, 1 Gnubby): ; $60, length, score, score, crawford a game begins: the match's length ; (0 for money), the player's and Gnubby's scores (at most 255), and ; 1 in the Crawford game ; $10+s, dice, n, n x (point, die) a turn: the dice rolled (the larger ; in the high 4 bits), and the steps the checkers took, each from a ; point (0-23 for points 1-24, 24 the bar, from the mover's side) by ; a die; n = 0 if there was no play ; $20+s, cube side s doubles, the cube now at cube ; $30+s side s takes ; $40+s side s passes ; $50+s, lo, hi side s wins the game, for lo + 256 hi points LOGSEQ equ $fb00 ; the records made, counting from any start LOGREC equ $fb01 ; the latest record (up to 11 bytes) TSTEPS equ $fb10 ; the player's steps this turn, as CSTEPS ; lgame: a game begins. lgame: ld a,$60 ld (LOGREC),a ld a,(MLEN) ld (LOGREC+1),a ld hl,(SCH) call .sc ld (LOGREC+2),a ld hl,(SCC) call .sc ld (LOGREC+3),a ld a,(CRAW) cp 1 ld a,0 jr nz,.c inc a .c: ld (LOGREC+4),a jr lnext ; a score, at most 255 .sc: ld a,h or a ld a,l ret z ld a,255 ret ; lnext: the record at LOGREC made, and counted. lnext: ld hl,LOGSEQ inc (hl) lnew: ret ; lmove: a turn of side A, with the dice DHI, DLO and the steps at HL (as ; CSTEPS: 4 points, $ff after the last, then their 4 dice), or none if HL ; is 0. lmove: or $10 ld (LOGREC),a ld a,(DHI) add a,a add a,a add a,a add a,a ld b,a ld a,(DLO) or b ld (LOGREC+1),a ld de,LOGREC+3 ld c,0 ld a,h or l jr z,.n .s: ld a,(hl) cp $ff jr z,.n ld (de),a inc de push hl inc hl inc hl inc hl inc hl ld a,(hl) pop hl ld (de),a inc de inc hl inc c ld a,c cp 4 jr nz,.s .n: ld a,c ld (LOGREC+2),a jr lnext ; ldbl: side A doubles (the cube about to double). ldbl: or $20 ld (LOGREC),a ld a,(CUBE) add a,a ld (LOGREC+1),a jr lnext ; lone: the one-byte record A (a take or a pass). lone: ld (LOGREC),a jr lnext ; lwin: WINNER wins POINTS. lwin: ld a,(WINNER) dec a or $50 ld (LOGREC),a ld a,(POINTS) ld (LOGREC+1),a xor a ld (LOGREC+2),a jr lnext ; lstep: the player's step from CURS by die E, the NDONE-th of the turn. ; Keeps DE. lstep: push de ld a,(NDONE) ld l,a ld h,0 ld bc,TSTEPS add hl,bc ld a,(CURS) ld (hl),a ld bc,4 add hl,bc ld (hl),e ld a,(NDONE) cp 3 jr nc,.x or a sbc hl,bc ; back to the point, then the next inc hl ld (hl),$ff .x: pop de ret