home *** CD-ROM | disk | FTP | other *** search
-
-
- xref abortps
- xref the_window
-
- * xdef con_signal_number
-
- section one
-
- include "ps.h"
-
-
- lref FindTask,45
- lref AllocSignal,51
- lref FreeSignal,52
- lref AddPort,55
- lref RemPort,56
- lref GetMsg,58
- lref OpenDevice,70
- lref CloseDevice,71
- lref DoIO,72
- lref SendIO,73
-
- callex macro
- move.l A6,-(SP)
- move.l 4,A6
- jsr _LVO\1(A6)
- move.l (SP)+,A6
- endm
-
- xdef start_console
- xdef stop_console
- xdef conmayread
- xdef conputchar
- xdef conputstr
-
- nt_msgport equ 4
-
- pa_signal equ 0
- pa_ignore equ 2
-
- cmd_reset equ 1
- cmd_read equ 2
- cmd_write equ 3
- cmd_update equ 4
- cmd_clear equ 5
- cmd_stop equ 6
- cmd_start equ 7
- cmd_flush equ 8
-
-
- start_console
- move.l the_window,o_window
-
- move.l #128,o_length
- *
- lea console_name,A0
- moveq #0,D0 unit
- lea out_request,A1 IORequest
- moveq #0,D1 flags
- callex OpenDevice
- *
-
- tst.l D0
- bne abortps
-
- * was opened
- move.b #nt_msgport,ln_type
- * clr.b port_flags
- move.b #pa_ignore,port_flags
-
- moveq #-1,D0
- callex AllocSignal
- move.b D0,con_signal_number
-
- moveq #0,D0 current task
- move.l D0,A1
- callex FindTask
- move.l D0,this_task
-
- lea console_port,A1
- callex AddPort
-
- move.l #console_port,reply_port
-
- move.l #out_request,A1
- move.l #in_request,A0
- moveq #11,D2
- 1$ move.l (A1)+,(A0)+
- dbra D2,1$
-
- bra conin
-
-
-
- stop_console
- moveq #0,D0
- move.b con_signal_number,D0
- bls 1$
- callex FreeSignal
- 1$
-
- lea console_port,A1
- callex RemPort
-
- lea out_request,A1
- callex CloseDevice
- rts
-
-
- conmayread
- lea console_port,A0
- callex GetMsg
- tst.l D0
- bne 1$
- moveq #-1,D0
- rts
- 1$
- moveq #0,D0
- move.b con_in_buffer,D0
- move.l D0,-(SP)
- bsr conin
- move.l (SP)+,D0
- rts
-
- conin
- move.w #cmd_read,i_command
- move.l #con_in_buffer,i_data
- moveq #1,D0
- move.l D0,i_length
-
- lea in_request,A1
- callex SendIO
-
- rts
-
-
- conputchar
- move.w #cmd_write,o_command
- lea con_out_buffer,A0
- move.b D0,(A0)
- move.l A0,o_data
- moveq #1,D0
- move.l D0,o_length
- lea out_request,A1
- callex DoIO
- rts
-
-
- conputstr
- move.w #cmd_write,o_command
- move.l D2,o_data
- move.l D3,o_length
- lea out_request,A1
- callex DoIO
- move.l o_actual,D0
- rts
-
-
- console_name
- dc.b 'console.device',0
-
- section two,bss
-
- out_request
- ds.b 14 LN
- reply_port
- ds.l 1 reply port
- ds.w 1 length
- ds.l 2 device node pointer & unit
- o_command
- ds.w 1
- ds.b 2 flags & error
- o_actual
- ds.l 1 actual length
- o_length
- ds.l 1
- o_window
- o_data
- ds.l 2
-
-
-
- in_request
- ds.b 14 LN
- ds.l 1
- ds.w 1
- ds.l 2
- i_command
- ds.w 1
- ds.b 2
- ds.l 1
- i_length
- ds.l 1
- i_data
- ds.l 2
-
- * message port
- console_port
- * LN = A A B B A
- ds.l 1
- ds.l 1
- * type of LN & pri & name
- ln_type
- ds.b 1
- ds.b 1
- ds.l 1
- port_flags
- ds.b 1 ;flags
- con_signal_number
- ds.b 1 ;signal bit num
- this_task
- ds.l 3 ;task & next 14b. is LH
- ds.b 6
- * end of message port
-
- con_in_buffer
- ds.b 2
- con_out_buffer
- ds.b 2
-
- end
-
-