;test the "Kipper Kartridge API" .ifndef KPR_API_VERSION_NUMBER .define EQU = .include "../inc/kipper_constants.i" .endif .include "../ip65/copymem.s" ; load A/X macro .macro ldax arg .if (.match (.left (1, arg), #)) ; immediate mode lda #<(.right (.tcount (arg)-1, arg)) ldx #>(.right (.tcount (arg)-1, arg)) .else ; assume absolute or zero page lda arg ldx 1+(arg) .endif .endmacro ; store A/X macro .macro stax arg sta arg stx 1+(arg) .endmacro print_a = $ffd2 .macro cout arg lda arg jsr print_a .endmacro .zeropage temp_ptr: .res 2 .bss kipper_param_buffer: .res $20 block_number: .res $0 .segment "STARTUP" ;this is what gets put at the start of the file on the C64 .word basicstub ; load address .macro print arg ldax arg ldy #KPR_PRINT_ASCIIZ jsr KPR_DISPATCH_VECTOR .endmacro .macro print_cr lda #13 jsr print_a .endmacro .macro call arg ldy arg jsr KPR_DISPATCH_VECTOR .endmacro basicstub: .word @nextline .word 2003 .byte $9e .byte <(((init / 1000) .mod 10) + $30) .byte <(((init / 100 ) .mod 10) + $30) .byte <(((init / 10 ) .mod 10) + $30) .byte <(((init ) .mod 10) + $30) .byte 0 @nextline: .word 0 ;look for KIPPER signature at location pointed at by AX look_for_signature: stax temp_ptr ldy #5 @check_one_byte: lda (temp_ptr),y cmp kipper_signature,y bne @bad_match dey bpl@check_one_byte clc rts @bad_match: sec rts init: ldax #KPR_CART_SIGNATURE ;where signature should be in cartridge jsr look_for_signature bcc @found_kipper_signature jmp kipper_signature_not_found @found_kipper_signature: lda #14 jsr print_a ;switch to lower case print #initializing lda #$4c sta $4000 ldax #print_vars stax $4001 ldy #KPR_INITIALIZE jsr KPR_DISPATCH_VECTOR bcc :+ print #failed jsr print_errorcode jmp bad_boot : print #ok print_cr call #KPR_PRINT_IP_CONFIG print #listening ldax #httpd_callback ; ldax #$0000 call #KPR_HTTPD_START jsr print_errorcode rts print_vars: lda #'h' call #KPR_HTTPD_GET_VAR_VALUE bcs :+ call #KPR_PRINT_ASCIIZ print #said lda #'m' call #KPR_HTTPD_GET_VAR_VALUE bcs :+ call #KPR_PRINT_ASCIIZ print_cr : rts bad_boot: print #press_a_key_to_continue restart: jsr get_key jmp $fce2 ;do a cold start print_errorcode: print #error_code call #KPR_GET_LAST_ERROR call #KPR_PRINT_HEX print_cr rts ;use C64 Kernel ROM function to read a key ;inputs: none ;outputs: A contains ASCII value of key just pressed get_key: jsr $ffe4 cmp #0 beq get_key rts kipper_signature_not_found: ldy #0 : lda kipper_signature_not_found_message,y beq restart jsr print_a iny jmp :- httpd_callback: jsr print_vars ldax #html ldy #2 ;text/html clc rts .rodata kipper_signature: .byte "KIPPER" ; API signature error_code: .asciiz "ERROR CODE: $" press_a_key_to_continue: .byte "PRESS A KEY TO CONTINUE",13,0 failed: .byte "FAILED ", 0 ok: .byte "OK ", 0 kipper_signature_not_found_message: .byte "NO KIPPER API FOUND",13,"PRESS ANY KEY TO RESET", 0 initializing: .byte "INITIALIZING ",0 listening: .byte "LISTENING",0 said: .byte ":",0 html: .byte "