c65gm/lib/cbmiolib.c65

144 lines
2.8 KiB
Text

//------------------------------------------------------------------------
// Library CBM I/O
//
// Author: Mattias Hansson
// Copyright (c) : 2005 Mattias Hansson
// License: GNU LGPL 2
// Language: 65CM v0.4+
// Dependencies: (all libs might be included, selectively)
// Target: CBM computers.
//
// Purpose: To shorten lib names to normal usage length
//------------------------------------------------------------------------
#IFNDEF __LIB_CBMIO
#DEFINE __LIB_CBMIO = 1
GOTO lib_cbmio_skip
WORD lib_cbmio_to_txtptr
FUNC lib_cbmio_print ( lib_cbmio_to_txtptr )
//On c64 we "borrow" the undocumented "print zero-terminated string" routine
#IFDEF MACHINE_C64
ASM
lda lib_cbmio_to_txtptr
ldy lib_cbmio_to_txtptr+1
jsr $ab1e ; strout kernal routine
ENDASM
#IFEND
#IFNDEF MACHINE_C64
BYTE lib_cbmio_to_char
PEEK lib_cbmio_to_txtptr -> lib_cbmio_to_char
WHILE lib_cbmio_to_char
GOSUB $ffd2 PASSING lib_cbmio_to_char AS ACC
INC lib_cbmio_to_txtptr
PEEK lib_cbmio_to_txtptr -> lib_cbmio_to_char
WEND
#IFEND
FEND
WORD lib_cbmio_tl_txtptr
FUNC lib_cbmio_printlf ( lib_cbmio_tl_txtptr )
CALL lib_cbmio_print ( lib_cbmio_tl_txtptr )
CALL lib_cbmio_print ( @lib_cbmio_tl_linefeed )
FEND
FUNC lib_cbmio_lf
CALL lib_cbmio_print ( @lib_cbmio_tl_linefeed )
FEND
FUNC lib_cbmio_home
CALL lib_cbmio_print ( @lib_cbmio_tl_home )
FEND
FUNC lib_cbmio_cls
CALL lib_cbmio_print ( @lib_cbmio_tl_cls )
FEND
ASM
lib_cbmio_tl_home
!8 19, 0
lib_cbmio_tl_cls
!8 147, 0
lib_cbmio_tl_linefeed
!8 13, 0
lib_cbmio_text_nullstr
!8 0
ENDASM
BYTE lib_cbmio_hb_value
FUNC lib_cbmio_hexoutb ( lib_cbmio_hb_value )
ASM
;ldy #0
;lda (lib_cbmio_ho_varaddress),y
lda lib_cbmio_hb_value
and #$0f
tax
lda lib_cbmio_ho_hexdigits,x
sta lib_cbmio_ho_hextxt+1
;lda (lib_cbmio_ho_varaddress),y
lda lib_cbmio_hb_value
lsr
lsr
lsr
lsr
tax
lda lib_cbmio_ho_hexdigits,x
sta lib_cbmio_ho_hextxt
ENDASM
CALL lib_cbmio_print ( @lib_cbmio_ho_hextxt )
FEND
WORD lib_cbmio_lib_cbmio_ho_value
FUNC lib_cbmio_hexoutw ( lib_cbmio_lib_cbmio_ho_value )
ASM
lda lib_cbmio_lib_cbmio_ho_value+1
sta lib_cbmio_hb_value
jsr lib_cbmio_hexoutb
lda lib_cbmio_lib_cbmio_ho_value
sta lib_cbmio_hb_value
jsr lib_cbmio_hexoutb
ENDASM
FEND
WORD lib_cbmio_i_ptr
FUNC lib_cbmio_input ( lib_cbmio_i_ptr )
BYTE char
LET char = 0
WHILE char <> 13
ASM
jsr $ffcf
sta |char|
ENDASM
POKE lib_cbmio_i_ptr WITH char
INC lib_cbmio_i_ptr
WEND
DEC lib_cbmio_i_ptr //replace ending #13 with #0
POKE lib_cbmio_i_ptr WITH 0
FEND
ASM
lib_cbmio_ho_hextxt
!8 0,0,0
lib_cbmio_ho_hexdigits
!pet "0123456789abcdef"
ENDASM
LABEL lib_cbmio_skip
#IFEND