home *** CD-ROM | disk | FTP | other *** search
- / Hand-entered code to load the first record off the virtual tape.
- / Copyright 1998 Warren Toomey wkt@cs.adfa.oz.au
- / Space optimised by John Holden at Sydney Uni
-
- / The following registers are used:
- / r0 holds the char to be sent or received
- / r1 holds the base (where the next data char is to go)
- / r2 holds the count, from 0 to 512
- / r3 holds the address of KL11 unit 1
- / r5 is used data pointer for outputing words
-
- .. = 70000
-
- .text
-
- start:
- mov pc,sp / Initialise the stack pointer
- clr r1 / Set the base to zero
- mov $176500, r3 / Set the base address of KL11 unit 1
-
- outblk:
- mov $datalst,r4 / get data list
- 1:
- movb (r4)+,r0 / get item
- bmi 3f / list done
- 2:
- tstb 4(r3) / test ready bit
- bpl 2b / do nothing
- movb r0,6(r3) / output character
- br 1b / and loop for next byte
- 3:
- inc block / bump clock counter
-
- jsr pc, getc / get the reply
- beq 4f / If not zero, jump to address 0, i.e exit
- clr pc
-
- 4:
- mov $1000, r2 / Set count to 512
- 5:
- jsr pc, getc / Get a data character
- movb r0, (r1)+ / Save at base and increment it
- dec r2 / Decrement data count
- bne 5b / and loop if any left to get
- br outblk / End of data, go back and get another block
-
- getc:
- tstb (r3) / test for ready bit
- bpl getc / do nothing
- movb 2(r3),r0 / get character
- rts pc
-
- .data
- datalst:
- .byte 31. / command bytes
- .byte 42. / command bytes
- .byte 0 / boot command
- .byte 0 / record number
- block: 0 / block number
- -1 / end of data marker. Assumes that there are
- / never more than 127 boot blocks
-