MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第144回]
●シリアル入力ルーチン(3)
前回の続きです。
下はPIC16F87のプログラムです。
ZB3BASIC+ZB3DOSシステムではPIC16F87を使います。
FT232RLを介してシリアル受信したデータをパラレルに変換してCPUに送出するプログラム部分です。
かなりややこしいことをやっていますから、わかりにくいと思いますが。
; RX data out to CPU
dout
bsf STATUS,5;bank1
movlw 0
movwf TRISA;RA out
movlw 86
movwf TRISB;RB4 out
bcf STATUS,5;bank0
dout1
clrwdt
btfss PORTB,7
goto wdata
btfss PORTB,1;if CPU READY
goto dout1
;data out
movf outdata,w
movwf PORTA
btfsc outdata,5
goto pb4set
bcf PORTB,4
goto dout2
pb4set
bsf PORTB,4
dout2
nop
bcf PORTB,0;STROBE ON
dout3
clrwdt
btfss PORTB,7
goto wdata;if 'TX DATA' from CPU is available
btfsc PORTB,1;wait till CPU ready
goto dout3
bsf PORTB,0;STROBE OFF
goto rdck
;
|
;
int
movwf savew
swapf STATUS,w
movwf savests
bcf STATUS,5;bank0
movf RCSTA,w
andlw 06;errcheck
btfss STATUS,zf
goto errstop
incf bfcntr,f
movf bfcntr,w
sublw 50
btfsc STATUS,zf;buffer full
goto errstop
movf FSR,w
movwf savefsr
movf bfwrend,w
movwf FSR
movf RCREG,w
movwf INDF
incf bfwrend,f
btfss bfwrend,7
goto int2
movlw 30
movwf bfwrend
int2
movf savefsr,w
movwf FSR
bcf PIR1,5;rcif
swapf savests,w
movwf STATUS
swapf savew,f
swapf savew,w
retfie
;
|


;
ORG $02A0
;
02A0 DB98 SIN:IN 98
02A2 0F RRC
02A3 DAA002 JC SIN
02A6 DB94 IN 94
02A8 4F MOV C,A
02A9 3EFE MVI A,FE;BUSY
02AB D398 OUT 98
02AD DB98 SIN2:IN 98
02AF 0F RRC
02B0 D2AD02 JNC SIN2
02B3 3EFF MVI A,FF;READY
02B5 D398 OUT 98
02B7 79 MOV A,C
02B8 C9 RET
;
|