Npwm.Text
Npwm.Text
| Filename | Npwm.Text |
|---|---|
| Size | 0.00 MB |
| Subsection | firmware / ROM88 |
| Downloads | 0 |
Contents
.Page
;++
;--
TimIt .Equ *
Lda #5 ; Time 6 pulses
Sta Temp2
Clc ; Should stay clear unless explicitly set
Jsr WtZero ; Look for low, then first high
Bcs RsOut ; 2,3 10 No edge within timeout period
Jsr RsEdge ; 8 8 Now at known locationo
Bcs RsOut ; 2,3 10 No edge within timeout period
Lda #0 ; 2 12
Sta RangeL ; 3 15
Sta RangeH ; 3 18 Zero both bytes of counter
;++
; WtZero & RsEdge both have 36 cycles (18.0 uSec) per tick of RangeL:H
;--
$20 Jsr WtZero ; Look for low
Bcs RsOut ; 2,3
Jsr RsEdge ; Wait for next edge on pulse
Bcs RsOut ; 2,3
Dec Temp2 ; 5 When less than zero then exit
Bpl $20 ; 2,3 15*(2+@+%+#) = 180 cycles
RsOut .Equ *
Rts ; 6 Common exit point
WtZero .Equ *
Bit K000 ; 3 ccV set to Zero
Bvc RsEd ; 3 6
RsEdge .Equ * ; Look for a rising edge
Bit K0FF ; 3 3 ccV eq 0 == low, ccV eq 1 == high
Bvs ReEd ; 3 6
RsEd .Equ *
Ldy #00 ; 2 8
Ldx #0A0 ; 2 10 Constant timeout for pulse counting
$10 Dey ; 2 2
Bne $20 ; 2,3 4,5
Dex ; 2 6
Bne $30 ; 2,3 8,9
Sec ; 2 10 When X-reg = 0 then return error
Rts
$20 Nop ; 2 7
Nop ; 2 9 Waste time
$30 Inc RangeL ; 5 14
Bne $40 ; 2,3 16,17
Inc RangeH ; 5 21
Bne $50 ; 3 24 Always taken ??
$40 Pha ; 3 20 Waste more time
Pla ; 4 24
$50 Lda Q7L ; 4 Bit7=0 ==>tach low, else tach high
Bvc $70 ; 2,3 30,31 ccV ==> look for low
Bpl $90 ; 2,3 32,33 If high then fall thru & exit
Nop ; 2 34
$60 Rts ; 6
$70 Bpl $60 ; 2,3 33,34 If low then exit
$90 Bcc $10 ; 3 36 Always taken?? -- 18.0 uSec loop
ChkLrg .Equ *
Lda #Lrge ; 5
Sta Temp1 ; For speed adjustment
Lda #WLow
Beq ChkComm
ChkSml .Equ *
Lda #Smal ; 1
Sta Temp1
Lda #TLow
;++
; ChkComm
; if H < TL
; then AdjPlus
; else if H > TL
; then TstHih
; else if L < Tl
; then AdjPlus
; else if L = TL
; then OK
; TstHih
; If H > Th
; then AdjMinus
; else if H <> Th
; then OK
; else if L <= TH
; then OK
; else AdjMinus
;--
ChkComm .Equ *
Sta InxPtrL ; Ptr to which constraints ( low of high )
Lda CurClass ; Current track class
Asl A ; *2 to address word array
Tay
Lda RangeH
Cmp @InxPtrL,y ; High must be greater than or equal to lowtable,y
Bcc AdjPlus ; High byte low, must spin slower
Bne TsHih ; High byte greater -- must see if w/in high boundary
Inc
Lda RangeL
Cmp @InxPtrL,y ; Must be greater than or equal to table,y
Bcc AdjPlus ; High bytes = and low byte low - slow it down
Beq ChkOK ; Both bytes are equal so within range
Clc
TsHih .Equ * ; ccC=1 if branched to here so add +1 for not 'Iny'
Tya
Adc #TblJmp ; 9.
Tay ; Index now points at high side of range
Lda @InxPtrL,y
Cmp RangeH ; High byte must be <= high boundary
Bcc AdjMinus ; High byte is too high, spin disk faster
Bne ChkOK ; If <> then low byte must be w/in range
Iny ; Point @ low by…
Showing first 3,000 characters of 4,130 total. Open the full document →