#include "kernalio.h" krnioerr krnio_pstatus[16]; #if defined(__C128__) || defined(__C128B__) || defined(__C128E__) void krnio_setbnk(char filebank, char namebank) { __asm { lda filebank ldx namebank jsr $ff68 // setbnk } } #pragma native(krnio_setbnk) #endif void krnio_setnam(const char * name) { __asm { lda name ora name + 1 beq W1 ldy #$ff L1: iny lda (name), y bne L1 tya W1: ldx name ldy name + 1 jsr $ffbd // setnam } } #pragma native(krnio_setnam) void krnio_setnam_n(const char * name, char len) { __asm { lda len ldx name ldy name + 1 jsr $ffbd // setnam } } #pragma native(krnio_setnam_n) bool krnio_open(char fnum, char device, char channel) { krnio_pstatus[fnum] = KRNIO_OK; __asm { lda #0 sta accu sta accu + 1 lda fnum ldx device ldy channel jsr $ffba // setlfs jsr $ffc0 // open bcc W1 lda fnum jsr $ffc3 // close jmp E2 W1: lda #1 sta accu E2: } } #pragma native(krnio_open) void krnio_close(char fnum) { __asm { lda fnum jsr $ffc3 // close } } #pragma native(krnio_close) krnioerr krnio_status(void) { __asm { jsr $ffb7 // readst sta accu lda #0 sta accu + 1 } } #pragma native(krnio_status) bool krnio_load(char fnum, char device, char channel) { __asm { lda fnum ldx device ldy channel jsr $ffba // setlfs lda #0 ldx #0 ldy #0 jsr $FFD5 // load lda #0 bcs W1 lda #1 W1: sta accu } } #pragma native(krnio_load) bool krnio_save(char device, const char* start, const char* end) { __asm { lda #0 ldx device ldy #0 jsr $ffba // setlfs lda #start ldx end ldy end+1 jsr $FFD8 // save lda #0 bcs W1 lda #1 W1: sta accu } } #pragma native(krnio_save) bool krnio_chkout(char fnum) { __asm { ldx fnum jsr $ffc9 // chkout lda #0 bcs W1 lda #1 W1: sta accu } } #pragma native(krnio_chkout) bool krnio_chkin(char fnum) { __asm { ldx fnum jsr $ffc6 // chkin lda #0 sta accu + 1 bcs W1 lda #1 W1: sta accu } } #pragma native(krnio_chkin) void krnio_clrchn(void) { __asm { jsr $ffcc // clrchn } } #pragma native(krnio_clrchn) bool krnio_chrout(char ch) { __asm { lda ch jsr $ffd2 // chrout sta accu lda #0 sta accu + 1 } } #pragma native(krnio_chrout) int krnio_chrin(void) { __asm { jsr $ffcf // chrin sta accu lda #0 sta accu + 1 } } #pragma native(krnio_chrin) int krnio_getch(char fnum) { if (krnio_pstatus[fnum] == KRNIO_EOF) return -1; int ch = -1; if (krnio_chkin(fnum)) { ch = krnio_chrin(); krnioerr err = krnio_status(); krnio_pstatus[fnum] = err; if (err) { if (err == KRNIO_EOF) ch |= 0x100; else ch = -1; } } krnio_clrchn(); return ch; } int krnio_putch(char fnum, char ch) { if (krnio_chkout(fnum)) { krnio_chrout(ch); krnio_clrchn(); return 0; } else return -1; } int krnio_puts(char fnum, const char * data) { if (krnio_chkout(fnum)) { int i = 0; while (data[i]) krnio_chrout(data[i++]); krnio_clrchn(); return i; } else return -1; } #pragma native(krnio_puts) int krnio_write(char fnum, const char * data, int num) { if (krnio_chkout(fnum)) { for(int i=0; i