ip65 technical reference

File : test/test_getc.s

variables

variabledescriptionsize (bytes)
output_buffer

implementation

.ifndef KIPPER_API_VERSION_NUMBER
  .define EQU     =
  .include "../inc/kipper_constants.i"
.endif

.include "../inc/common.i"
.include "../inc/commonprint.i"
.import print_a
.import cfg_get_configuration_ptr
.import  io_device_no
.import  io_sector_no
.import  io_track_no
.import  io_read_sector
.import  io_write_sector

.import io_read_file_with_callback
.import io_read_file
.import io_filename
.import io_filesize
.import io_load_address
.import io_callback
.import get_key
.import ip65_error
.import ip65_process
.import io_read_catalogue_ex

.macro cout arg
  lda arg
  jsr print_a
.endmacro   



.bss
 sector_buffer: .res 256
 output_buffer: .res 520
 .export output_buffer
current_byte_in_row: .res 1
current_byte_in_sector: .res 1
start_of_current_row: .res 1

directory_buffer: .res 4096

.segment "STARTUP"    ;this is what gets put at the start of the file on the C64

.word basicstub    ; load address

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

init:
  lda #14
  jsr print_a ;switch to lower case 
  lda     $dc08 ;read deci-seconds - start clock ticking
  sta  $dc08
  jsr load_buffer
@loop:
  lda #5  ;timeout period
  jsr getc
  bcs @done
  jsr print_a
  jmp @loop
@done:
  rts

load_buffer:
  ldax #buffer
  stax next_char_ptr
  ldax #buffer_length
  stax buff_length
  rts


getc:
  sta getc_timeout_seconds

  clc
  lda $dc09  ;time of day clock: seconds (in BCD)
  sed
  adc getc_timeout_seconds
  cmp #$60
  bcc @timeout_set
  sec
  sbc #$60
@timeout_set:  
  cld
  sta getc_timeout_end  

@poll_loop: 
  jsr ip65_process
  jsr next_char
  bcs @no_char
  rts ;done!
@no_char:
  lda $dc09  ;time of day clock: seconds
  cmp getc_timeout_end  
  bne @poll_loop
  sec
  rts
  
next_char:
  lda buff_length
  bne @not_eof
  lda buff_length+1
  bne @not_eof
  sec
  rts
@not_eof:  
  next_char_ptr=*+1
  lda $ffff
  pha
  inc next_char_ptr
  bne :+
  inc next_char_ptr+1
:  
  sec
  lda   buff_length
  sbc #1
  sta   buff_length
  lda   buff_length+1
  sbc #0
  sta   buff_length+1
  pla
  clc
  
  rts
  
.rodata
buffer:
  .byte "this is a test1!",13
  .byte "this is a test2!",13
  .byte "this is a test3!",13
  .byte "this is a test4!",13
  .byte "this is a test5!",13
  .byte "this is a test6!",13
  .byte "this is a test7!",13
  .byte "this is a test8!",13
  .byte "this is a test9!",13
  .byte "this is a test10!",13
  .byte "this is a test1@",13
  .byte "this is a test2@",13
  .byte "this is a test3@",13
  .byte "this is a test4@",13
  .byte "this is a test5@",13
  .byte "this is a test6@",13
  .byte "this is a test7@",13
  .byte "this is a test8@",13
  .byte "this is a test9@",13
  .byte "this is a test10@",13
  .byte "this is a test1*",13
  .byte "this is a test2*",13
  .byte "this is a test3*",13
  .byte "this is a test4*",13
  .byte "this is a test5*",13
  .byte "this is a test6*",13
  .byte "this is a test7*",13
  .byte "this is a test8*",13
  .byte "this is a test9*",13
  .byte "this is a test10*",13

buffer_length=*-buffer

.bss
getc_timeout_end: .res 1
getc_timeout_seconds: .res 1
buff_length: .res 2


;-- LICENSE FOR test_getc.s --
; The contents of this file are subject to the Mozilla Public License
; Version 1.1 (the "License"); you may not use this file except in
; complianc