Homebrew:F8 of Nations
Smallest Fairchild Channel F game ever with only 37 Bytes on the black and white version. Uses almost only BIOS routines.
Unfortunately the original description has been lost but it was something about saving the Earth by pressing the sequence showed as soon as possible.
The only game to date that uses the console buttons instead of a hand controller.
; F8 of Nations ; ; written by nycurt processor f8 ;------------; ; BIOS Calls ; ;------------; prompt = $0099 clrscrn = $00D0 IncP1Score = $02AC ;===================; ; Main Program Code ; ;===================; ;---------------; ; Program Entry ; ;---------------; org $800 LR $5,A ; $55 Needs to be at beginning of cartridge LR $A,A ; Can be anything in this byte. In early versions this was used as code IF 0 If you add the following code to the beginning of the game, the gameplay will be in color and it will keep track of your score (which wraps around when you get to 99). ENDIF IF 0 li $99 LISU 2 ; 02b0 6e LISL 6 ; 02b0 6e lr I,A li $d6 lisu 3 lr S,A lr 3, A pi clrscrn nextround: LISU 2 ; 02b0 6e pi IncP1Score ENDIF nextround: li $45 ; Bit 6 in this byte is used to emit a sound when written to port 5 outs 5 ; Play a sound ; Store $45 in reg0 - $4 specifies blue and $5 the '5' character to the prompt func. This ; register will be decremented 1 to 4 times to select a number from '1' to '4' lr $0,A ; And the byte referenced by the DC with $3 - this gives a number from 1 to 4 for the game lis $3 ; The DC is used in addressing memory. The H register will have been initialized to 0 by the BIOS ; before we are started, so we point the DC at 0. Each successive round will advance the DC by ; one byte. The number that is selected (1-4) is determined by the low-order three bits in the ; byte loaded from the DC. If the user plays for a very long time the DC will increment beyond ; valid memory. lr DC,H nm ; and #$3 with the memory referenced by the DC lr H,DC ; Loop control variable initialized with the # that the user must match ; The value $10 will be shifted right each time through the loop and will match the correct ; input value for the button that corresponds to the number. lr $9,A li $10 loop: sr 1 ds $0 ; Decrement the value that will be sent to prompt (initialized to $45) ds $9 bc loop lr $9,A ; This has the bit corresponding to the correct button the user must press pi prompt ; This displays the number (with '?'), and waits for input and delays briefly ; There is no need to write $0 to port 0 to prepare it for input... the prompt ; subroutine will have done so for us... see instructions at $764 in BIOS ins 0 ; Retrieve console button state com ; Complement it ($1=but1,$2=but2,$4=but3,$8=but4) ni $F ; Clip off the top four bits outs 5 ; Clear the sound register... We know the relevant top two bits of A are clear xs $9 ; XOR with Reg 9 which contains the correct input delayforever: bnz delayforever ; User lost the game. Freeze br nextround ; The user entered the correct response. Torture them some more org $fff ; added only to set a useable rom-size in MESS .byte $ff