Re: A83: Convertion of a TI85 link routine


[Prev][Next][Index][Thread]

Re: A83: Convertion of a TI85 link routine




I posted a proven-to-work routine before... you should use it since it
was designed for the 83

"M. Delmas" wrote:
> 
> I try to convert a link routine of a program which works on TI85 but I
> doesn't work. There are two commands use : PutByte and GetByte. Here is the
> original source:
> *****************************
> GetByte:
>         push bc
>         LD      B,008H
> R0:
>         LD      DE,0FFFFH
>         JR      R2
> R1:
>         IN      A,(PORT)
>         AND     003H
>         jr      z, GB_End
>         CP      003H
>         JR      NZ,R3
>         IN      A,(PORT)
>         AND     003H
>         jr      z, GB_End
>         CP      003H
>         JR      NZ,R3
> R2:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R1
>         jr      GB_End
> R3:
>         SUB     002H
>         JR      NC,R8
>         LD      A,0D4H
>         OUT     (PORT),A
>         RR      C
>         LD      DE,0FFFFH
> R4:
>         IN      A,(PORT)
>         AND     003H
>         CP      002H
>         JR      Z,R5
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R4
>         jr      GB_End
> R5:
>         LD      A,0C0H
>         OUT     (PORT),A
>         LD      D,004H
> R6:
>         DEC     D
>         JR      Z,R7
>         IN      A,(PORT)
>         AND     003H
>         CP      003H
>         JR      NZ,R6
> R7:
>         DJNZ    R0
>         LD      A,C
>         jr      GB_End
> R8:
>         LD      A,0E8H
>         OUT     (PORT),A
>         RR      C
>         LD      DE,0FFFFH
> R9:
>         IN      A,(PORT)
>         AND     003H
>         CP      001H
>         JR      Z,R5
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R9
> GB_End
>         pop bc
>         ret
> 
> PutByte:
>         push bc
>         LD      C,A
>         LD      B,8             ; 8 Bits
> PB_Next_Bit:
>         LD      A, $C0          ; Set W1 and R1
>         OUT     (7),A
> 
> Cont:
>         RR      C
>         JR      NC, PB_SendZero
> PB_SendOne:
>         LD      A, $E8
>         JR      PB_Output_val
> PB_SendZero:
>         LD      A, $D4
> PB_Output_val:
>         OUT     (7),A
> 
>         LD      DE, $FFFF       ; For time-out
> PB_Wait_for_W0_and_R0:
>         IN      A,(7)
>         AND     3
>         JR      Z, PB_Continue
>         IN      A,(7)
>         AND     3
>         JR      Z, PB_Continue
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ, PB_Wait_for_W0_and_R0
>         JR      PB_End          ; If error return.
> 
> PB_Continue:
>         LD      A, $C0          ; Set W1 and R1
>         OUT     (7),A
> 
>         LD      DE, $FFFF       ; Reload time-out
> PB_Wait_for_W1_and_R1:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      Z, PB_End
>         IN      A,(7)
>         AND     3
>         CP      3
>         JR      NZ, PB_Wait_for_W1_and_R1
> 
>         DJNZ    PB_Next_Bit
> 
>         ld      DE, $06FF              ; Small delay
> PB_EW:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ, PB_EW
> 
> PB_End:
>         POP    BC
>         RET
> *****************************
> What must be change to work on a TI83. I tried to convert it myself, this is
> that I think it should be.
> *****************************
> GetByte:
>         push bc
>         LD      B,008H
> R0:
>         LD      DE,0FFFFH
>         JR      R2
> R1:
>         IN      A,(BPORT)
>         AND     $C
>         jr      z, GB_End
>         CP      $C
>         JR      NZ,R3
>         IN      A,(BPORT)
>         AND     $C
>         jr      z, GB_End
>         CP      $C
>         JR      NZ,R3
> R2:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R1
>         jr      GB_End
> R3:
>         SUB     002H
>         JR      NC,R8
>         LD      A,0D4H
>         OUT     (BPORT),A
>         RR      C
>         LD      DE,0FFFFH
> R4:
>         IN      A,(BPORT)
>         AND     $C
>         CP      002H
>         JR      Z,R5
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R4
>         jr      GB_End
> R5:
>         LD      A,0C0H
>         OUT     (BPORT),A
>         LD      D,004H
> R6:
>         DEC     D
>         JR      Z,R7
>         IN      A,(BPORT)
>         AND     $C
>         CP      $C
>         JR      NZ,R6
> R7:
>         DJNZ    R0
>         LD      A,C
>         jr      GB_End
> R8:
>         LD      A,0E8H
>         OUT     (BPORT),A
>         RR      C
>         LD      DE,0FFFFH
> R9:
>         IN      A,(BPORT)
>         AND     $C
>         CP      001H
>         JR      Z,R5
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ,R9
> GB_End
>         pop bc
>         ret
> 
> PutByte:
>         push bc
>         LD      C,A
>         LD      B,8             ; 8 Bits
> PB_Next_Bit:
>         LD      A, D0HD1H   ; Set W1 and R1
>         OUT     (BPORT),A
> 
> Cont:
>         RR      C
>         JR      NC, PB_SendZero
> PB_SendOne:
>         LD      A, D0LD1H
>         JR      PB_Output_val
> PB_SendZero:
>         LD      A, D0HD1L
> PB_Output_val:
>         OUT     (BPORT),A
> 
>         LD      DE, $FFFF       ; For time-out
> PB_Wait_for_W0_and_R0:
>         IN      A,(BPORT)
>         AND     $C
>         JR      Z, PB_Continue
>         IN      A,(BPORT)
>         AND     $C
>         JR      Z, PB_Continue
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ, PB_Wait_for_W0_and_R0
>         JR      PB_End          ; If error return.
> 
> PB_Continue:
>         LD      A, D0HD1H          ; Set W1 and R1
>         OUT     (BPORT),A
> 
>         LD      DE, $FFFF       ; Reload time-out
> PB_Wait_for_W1_and_R1:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      Z, PB_End
>         IN      A,(BPORT)
>         AND     $C
>         CP      $C
>         JR      NZ, PB_Wait_for_W1_and_R1
> 
>         DJNZ    PB_Next_Bit
> 
>         ld      DE, $06FF              ; Small delay
> PB_EW:
>         DEC     DE
>         LD      A,D
>         OR      E
>         JR      NZ, PB_EW
> 
> PB_End:
>         POP    BC
>         RET
> *****************************
> Why it doesn't work?
> 
> On the TI82 or 85, the value returned by the link port are 0, 1, 2 or 3,
> that made operations easy to do. Is there on the TI83 values like that,
> which are following themselves?
> I'm sorry for my very bad english.
> 
> Cédric
> 
> ------------------------------------------------------
> E-mail : delmas.temp@wanadoo.fr
> ICQ : 38856763
> Site WEB : http://www.multimania.com/delmasce/

-- 
Scott "_Wrath_" Dial
homosapian@geocities.com
ICQ#3608935
http://www.geocities.com/~homosapian/


References: