diff --git a/src/SUDOKU.MID b/src/SUDOKU.MID index 1512bff..f8ed85c 100644 --- a/src/SUDOKU.MID +++ b/src/SUDOKU.MID @@ -15,21 +15,31 @@ PDL: BLOCK PDLLEN ;Reserve the stack memory BPTR==440700 ;Define a byte pointer. CHTTYO==1 ;Define a channel for TTY output. +CHTTYI==2 ;Define a channel for TTY input. START: MOVE P,[-PDLLEN,,PDL-1] ;Initialize the stack. .OPEN CHTTYO,[.UAO,,'TTY] ;Open an output channel on the TTY. .LOSE %LSFIL ;Gobble up any errors. MOVE A,[BPTR,,HELLO] ;Load A with a byte pointer to HELLO. - PUSHJ P,OUTSTR ;Print the out string. + PUSHJ P,PUTLN ;Print the out string. JRST DONE ;Jump to the end of the program. + +;Subroutine to print a string of text on the output. +; Clobbers A and B. OUTSTR: HRLI A,BPTR ;Ensure, A is a byte pointer. OUT: ILDB B,A ;Load the next byte from A. JUMPE B,OUTEX ;Exit the routine, if all bytes are done. .IOT CHTTYO,B ;Print a character. JRST OUT ;Jump back to print the next character. -OUTEX: .IOT CHTTYO,[^M] ;Print carriage return and - .IOT CHTTYO,[^J] ;newline characters. - POPJ P, ;Return from the subroutine. +OUTEX: POPJ P, ;Return from the output routine. + +;Subroutine to print an entire line of text, including a line break. +;Clobbers A and B. +PUTLN: PUSHJ P,OUTSTR ;Calls the OUTSTR subroutine + .IOT CHTTYO,[^M] ;Print a carriage return + .IOT CHTTYO,[^J] ;and a new line + POPJ P, ;before returning. + DONE: .LOGOUT 2, ;Exit point for the program. HELLO: ASCIZ /HELLO WORLD/ ;Define example string. END START