mirror of
https://github.com/KarolS/millfork.git
synced 2024-12-25 06:29:17 +00:00
63ff28e94e
* non-asm macros can now take `const` and `call` parameters * register parameters to asm functions and macros can be given names if annotated explicitly
64 lines
2.5 KiB
Plaintext
64 lines
2.5 KiB
Plaintext
// Routines from C64 KERNAL ROM
|
|
|
|
// CHROUT. Write byte to default output. (If not screen, must call OPEN and CHKOUT beforehands.)
|
|
// Input: A = Byte to write.
|
|
asm void chrout(byte register(a) char) @$FFD2 extern
|
|
|
|
// CHRIN. Read byte from default input (for keyboard, read a line from the screen). (If not keyboard, must call OPEN and CHKIN beforehands.)
|
|
// Output: A = Byte read.
|
|
asm byte chrin() @$FFCF extern
|
|
alias getchar = chrin
|
|
|
|
// CHKIN. Define file as default input. (Must call OPEN beforehands.)
|
|
// Input: X = Logical number.
|
|
asm void chkin(byte register(x) fd) @$FFC6 extern
|
|
|
|
// CHKOUT. Define file as default output. (Must call OPEN beforehands.)
|
|
// Input: X = Logical number.
|
|
asm void chkout(byte register(x) fd) @$FFC9 extern
|
|
|
|
// CLRCHN. Close default input/output files (for serial bus, send UNTALK and/or UNLISTEN); restore default input/output to keyboard/screen.
|
|
asm void clrchn() @$FFCC extern
|
|
|
|
// READST. Fetch status of current input/output device, value of ST variable. (For RS232, status is cleared.)
|
|
// Output: A = Device status.
|
|
asm byte readst() @$FFB7 extern
|
|
|
|
asm void putchar(byte register(a) char) {
|
|
JSR chrout
|
|
LDA #0
|
|
STA $D4
|
|
? RTS
|
|
}
|
|
|
|
inline void new_line() {
|
|
chrout(13)
|
|
}
|
|
|
|
// OPEN. Open file. (Must call SETLFS and SETNAM beforehands.)
|
|
asm void open() @$FFC0 extern
|
|
|
|
// CLOSE. Close file.
|
|
// Input: A = Logical number.
|
|
asm void close(byte register(a) fd) @$FFC3 extern
|
|
|
|
// SETLFS. Set file parameters.
|
|
// Input: A = Logical number; X = Device number; Y = Secondary address.
|
|
asm void setlfs(byte register(a) fd, byte register(x) device, byte register(y) secondary) @$FFBA extern
|
|
|
|
// SETNAM. Set file name parameters.
|
|
// Input: A = File name length; X/Y = Pointer to file name.
|
|
asm void setnam(pointer register(xy) filename, byte register(a) len) @$FFBD extern
|
|
|
|
// LOAD. Load or verify file. (Must call SETLFS and SETNAM beforehands.)
|
|
// Input: A: 0 = Load, 1-255 = Verify; X/Y = Load address (if secondary address = 0).
|
|
// Output: Carry: 0 = No errors, 1 = Error; A = KERNAL error code (if Carry = 1); X/Y = Address of last byte loaded/verified (if Carry = 0).
|
|
asm clear_carry load(bool register(a) verify, pointer register(xy) address) @$FFD5 extern
|
|
|
|
// SAVE. Save file. (Must call SETLFS and SETNAM beforehands.)
|
|
// Input: A = Address of zero page register holding start address of memory area to save; X/Y = End address of memory area plus 1.
|
|
// Output: Carry: 0 = No errors, 1 = Error; A = KERNAL error code (if Carry = 1).
|
|
asm clear_carry save(byte register(a) address, word register(xy) past_end) @$FFD8 extern
|
|
|
|
word irq_pointer @$314
|