2016-09-04 03:02:12 +01:00
|
|
|
:start
|
2016-09-06 00:18:20 +01:00
|
|
|
LOADUI R2 10 ; We will be using R2 for our counter
|
2016-09-04 03:02:12 +01:00
|
|
|
;; Prep TAPE_01
|
|
|
|
LOADUI R0 0x1100
|
|
|
|
FOPEN_READ
|
|
|
|
|
2016-09-06 00:18:20 +01:00
|
|
|
|
|
|
|
;; Main loop of more functionality
|
|
|
|
;; Modifies R0, R1 and R2
|
|
|
|
;; Does not utilize stack or heap
|
2016-09-04 03:02:12 +01:00
|
|
|
:main
|
|
|
|
;; Read a byte
|
|
|
|
LOADUI R1 0x1100
|
|
|
|
FGETC
|
|
|
|
|
|
|
|
;; Check for EOF
|
|
|
|
CMPSKIP.GE R0 0
|
|
|
|
JUMP @main_1
|
|
|
|
|
|
|
|
;; Write the Byte
|
|
|
|
FALSE R1
|
|
|
|
FPUTC
|
|
|
|
|
|
|
|
;; Check for LF
|
2016-09-06 00:18:20 +01:00
|
|
|
CMPSKIP.NE R0 10 ; Skip if not line feed
|
|
|
|
SUBI R2 R2 1 ; Decrement on line feed
|
2016-09-04 03:02:12 +01:00
|
|
|
|
|
|
|
;; Loop if not Zero
|
2016-09-06 00:18:20 +01:00
|
|
|
CMPSKIP.E R2 0 ; Skip if counter is zero
|
2016-09-04 03:02:12 +01:00
|
|
|
JUMP @main
|
|
|
|
|
|
|
|
;; Otherwise provide main loop functionality
|
2016-09-06 00:18:20 +01:00
|
|
|
FGETC ; Wait for key press
|
|
|
|
LOADUI R2 10 ; Reset counter
|
|
|
|
JUMP @main ; And loop
|
2016-09-04 03:02:12 +01:00
|
|
|
|
|
|
|
:main_1
|
|
|
|
;; Close up as we are done
|
2016-09-06 00:18:20 +01:00
|
|
|
LOADUI R0 0x1100 ; Close TAPE_01
|
2016-09-04 03:02:12 +01:00
|
|
|
FCLOSE
|
|
|
|
HALT
|