これはユニークなアセンブリ言語であり、私の教科書以外ではあまり一般的ではないと思うので、どれだけ多くの人が助けてくれるかわかりません。問題は、タイプ .tap のファイルからファイル全体を読み取り、その内容を .prt ファイルにコピーすることです。CUSP の「架空の」プリンタとテープ ドライブを使用します。
私のコード:
.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
残念ながら、すべてではなく、ファイルからいくつかのランダムな文字を出力しているようです。