;Link port send/receive routines include "settings.inc" include "ti83plus.inc" include "equates.inc" SEGMENT Main GLOBALS ON EXTERN PutSApp,IGetKey,keyLoop,StartApp,DispHexA SendByte: ld c,a SendByteC: call NZif83Plus jr z,has_LA ld b,8 loop_byte_send: ld de,0FFFFh rr c jr nc,bit_is_reset ld a,2 jr bit_continue bit_is_reset: ld a,1 bit_continue: out (0),a bit_loop: in a,(0) and 3 jr z,bit_done in a,(0) and 3 jr z,bit_done dec de ld a,d or e jr nz,bit_loop link_error: B_JUMP ErrLinkXmit bit_done: ld a,0 out (0),a ld de,0FFFFh bit_really_done: dec de ld a,d or e jr z,link_error in a,(0) and 3 cp 3 jr nz,bit_really_done djnz loop_byte_send ret has_LA: call enableLinkAssist_sub call reset_delay_counter call reset_delay_counter loc_6B79: ld a,0FAh ld (9C86h),a in a,(9) bit 5,a jr z,loc_6B88 ld a,c out (0Dh),a ret loc_6B88: call NZifTimeout jr z,loc_6B79 B_JUMP ErrLinkXmit ReceiveByte: di call ReceiveByteToC call RecAByteIO_sub ret c ret nz jr z,ReceiveByte RecAByteIO_sub: cp 1 ld a,c jr nz,$F cp 0E0h jr z,$F B_JUMP ErrLinkXmit $$: cp 0E0h ret nz in a,(2) and 80h jr z,label1 in a,(9) bit 6,a jr nz,label2 and 19h jr nz,label3 label1: call sub_6C7F jr c,loc_446E jr nz,enableLinkAssistCtoA label2: call sub_6CD5 xor a ret label3: ld a,c ret loc_446E: nop enableLinkAssistCtoA: call enableLinkAssist ld a,c or a ret ReceiveByteToC: ld b,8 loop_byte: call NZif83Plus jr z,ReceiveLAByteToC ld de,0FFFFh jr start_loop loop: in a,(0) and 3 jr nz,$F errLinkXmit: B_JUMP ErrLinkXmit $$: cp 3 jr nz,errLinkXmit in a,(0) and 3 jr z,errLinkXmit cp 3 jr nz,ReceiveByteToC_ready start_loop: dec de ld a,d or e jr nz,loop jr errLinkXmit ReceiveByteToC_ready: cp 2 jr z,loc_44D5 ld a,1 out (0),a rr c ld de,0FFFFh loc_44AE: in a,(0) and 3 cp 2 jr z,loc_44BF dec de ld a,d or e jr nz,loc_44AE jr errLinkXmit loc_44BF: ld a,0 out (0),a ld d,4 loc_44C5: dec d jr z,loc_44D0 in a,(0) and 3 cp 3 jr nz,loc_44C5 loc_44D0: djnz loop_byte ld a,0 ret loc_44D5: ld a,2 out (0),a rr c ld de,0FFFFh loop_2: in a,(0) and 3 cp 1 jr z,loc_44BF dec de ld a,d or e jr nz,loop_2 jr errLinkXmit NZif83Plus: in a,(2) and 80h xor 80h ret enableLinkAssist: call NZif83Plus ret nz enableLinkAssist_sub: bit 0,(iy+3Eh) ret nz set 0,(iy+3Eh) in a,(9) xor a out (8),a ret ReceiveLAByteToC: call enableLinkAssist_sub call reset_delay_counter call reset_delay_counter receive_loop: ld a,0 ld (9C86h),a call NZifTimeout jr nz,errLinkXmit in a,(9) bit 6,a jr nz,transmission_error and 11h jr z,receive_loop in a,(0Ah) ld c,a ld a,0 ret transmission_error: and 11h jr z,errLinkXmit in a,(0Ah) ld c,a ld a,1 ret reset_delay_counter: push hl ld hl,0FFFFh in a,(20h) and 1 jr nz,fast_speed ld hl,6800h fast_speed: ld (9CACh),hl pop hl ret NZifTimeout: push hl ld h,2 delay_loop: dec h jr nz,delay_loop ld hl,(9CACh) dec hl ld (9CACh),hl ld a,l or h jr nz,not_timed_out_yet ld a,1 jr timeout not_timed_out_yet: ld a,0 timeout: or a pop hl ret sub_6C7F: push hl in a,(2) and 80h jr z,loc_6CB3 ld hl,28h in a,(20h) and 1 jr nz,loc_6C91 ld l,10h loc_6C91: dec hl ld a,h or l jr z,loc_6CCF in a,(9) bit 6,a jr nz,loc_6CB0 bit 4,a jr nz,loc_6CCC and 8 jr z,loc_6C91 in a,(9) bit 6,a jr nz,loc_6CB0 and 19h jr z,loc_6C91 jr nz,loc_6CCC loc_6CB0: xor a jr loc_6CCC loc_6CB3: ld hl,16h loc_6CB6: dec hl ld a,h or l jr z,loc_6CCF in a,(0) and 3 cp 3 jr z,loc_6CB6 in a,(0) and 3 cp 3 jr z,loc_6CB6 or a loc_6CCC: pop hl ld a,c ret loc_6CCF: scf jr loc_6CCC sub_6CD5: call sub_6CF6 call sub_6C49 jr c,errLinkXmit in a,(2) and 80h call nz,sub_6C09 loc_6CE4: call ReceiveByteToC ld d,a ld a,c cp 1 push af push de call ReceiveByteToC pop de ld e,a pop af ld b,a ld a,c ret sub_6CF6: in a,(2) and 80h ret z in a,(9) and 99h ret nz loc_6D00: res 0,(iy+3Eh) ld a,80h out (8),a ret sub_6C49: push hl in a,(2) and 80h jr z,loc_6C59 ld hl,39h ld a,(20h) and 1 jr nz,loc_6C5C loc_6C59: ld hl,17h loc_6C5C: dec hl ld a,h or l jr nz,loc_6C6A in a,(0) and 3 jr z,loc_6C5C loc_6C67: pop hl ld a,c ret loc_6C6A: scf jr loc_6C67 sub_6C09: ld a,80h out (8),a xor a out (8),a in a,(9) set 0,(iy+3Eh) xor a ret