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 ; |