我不确定你们中有多少人可以提供帮助,因为这是一种独特的汇编语言,而且我认为它在我的教科书之外并不常见。问题是从 .tap 类型的文件中读取整个文件,然后使用 CUSP 的“虚构”打印机和磁带驱动器将其中的内容复制到 .prt 文件中。
我的代码:
.EQU TDR_CNTL, $020
.EQU TDR_STAT, $020
.EQU TDR_LEN, $021
.EQU TDR_ADDR, $022
.EQU EOT_BIT, $08
.EQU READ_BITS, $10
.EQU MOUNTED_BIT, $20
.EQU NEXT_LINE_VALUE, $05
.EQU PRINT_STAT, $010
.EQU PRINT_DATA, $011
.EQU PRINT_ON, $20 ;?
.EQU PRINT_READY, $20
.EQU LF, $0A
MAIN:INB TDR_STAT
JGE mounterror
LDA# BUFFER
OUTW TDR_ADDR
NEXT_REC: LDA# B_SIZE
OUTB TDR_LEN
LDA# READ_BITS
OUTB TDR_CNTL
POLL:INB TDR_STAT
JLT COMPLETE
AND# MOUNTED_BIT
JEQ STOP
JMP POLL
COMPLETE:AND# EOT_BIT
JNE STOP
INB TDR_LEN
JEQ newline
STA COUNT
LDX# 0
copystart: LDX# 0
INB PRINT_STAT
AND# PRINT_ON
JEQ offlineerr ;If printer offline, print error
copy_char: NOP ;Else, begin reading chars
INB PRINT_STAT
AND# PRINT_READY
JEQ copy_char ;If printer not ready, NOP and try again
LDC BUFFER ;Else read char
OUTB PRINT_DATA ;And print
AOC COUNT
JLT copy_char
newline: NOP
INB PRINT_STAT ;If printer not ready, wait to print new line
AND# PRINT_READY
JEQ newline
LDA# LF
OUTB PRINT_DATA
JMP next_rec
mounterror: PSH# STRLEN1
PSH# STR1
JSR $E05
ADS# 2
JMP stop
offlineerr: PSH# STRLEN2
PSH# STR2
JSR $E05
ADS# 2
JMP stop
stop: HLT
.EQU B_SIZE, 30
BUFFER: .BLKW (B_SIZE+2)*3
COUNT: .BLKW 1
STR1: .CHAR 'Tape not mounted', STRLEN1
STR2: .CHAR 'Printer offline', STRLEN2
不幸的是,它似乎只是从文件中打印出一些随机字符,而不是全部。