求Commodore 8032/BASIC4的字符串输出子程序(类似C64的$AB1E)
Great question! The Commodore 8032 (a PET-series machine running BASIC 4.0) has ROM-based string output routines that mirror the C64's $AB1E functionality, though the addresses and exact behavior have small differences. Here's what you need to know:
Key String Output Subroutine for 8032
The closest ROM routine to the C64's $AB1E on the 8032 is $BDCD. This is the standard null-terminated string printer, with these details:
- Call Method: Load the low byte of your string's starting address into the accumulator (
A), and the high byte into the Y register (Y). Then runJSR $BDCD. - Termination Rule: The routine prints characters from the specified address until it hits a null byte (
$00). Unlike the C64's $AB1E, it doesn't recognize a quote character (",$22) as a stop signal—only$00terminates the output.
Example Assembly Code
If you have a null-terminated string stored at $0200 (e.g., $0200: "HELLO WORLD" $00), here's how to trigger the output:
LDY #$02 ; Load high byte of string address into Y LDA #$00 ; Load low byte of string address into A JSR $BDCD ; Execute string output routine
Handling Quote-Terminated Strings (If Needed)
Since $BDCD only stops at $00, you can wrap the 8032's known character output routine ($FFD2) in a small loop to replicate the C64's dual-terminator behavior:
; Assume string start address is stored in ($00,$01) (low/high bytes) LDX #$00 PRINT_LOOP: LDA ($00,X) ; Load next character from string BEQ END_PRINT ; Exit if null byte is found CMP #$22 ; Check if current character is a quote BEQ END_PRINT ; Exit if quote is found JSR $FFD2 ; Print the current character INX BNE PRINT_LOOP END_PRINT:
Memory Map Note
The 8032's ROM lives in the $C000-$FFFF range, so addresses like $BDCD are fixed in the machine's standard BASIC 4.0 ROM and won't vary across regular 8032 units.
内容的提问来源于stack exchange,提问作者John G

