

        WIDGET.ASSEM            Page   1
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0000            1      1 
0000            1      2                 .LSTOFF
175A            1   1385                 .LSTON
























































        WIDGET.ASSEM            Page   2
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


175A            1   1386                 .Page
175A            1   1387                 .FIN
175A            1   1388                 
175A            1   1389                 .ORG    $0
0000            1   1390                 
0000 04 75      1   1391 Int_Vec0:       .DW     Vector0
0002 04 75      1   1392 Int_Vec1:       .DW     Vector1
0004 04 75      1   1393 Int_Vec2:       .DW     Vector2
0006 04 75      1   1394 Int_Vec3:       .DW     Vector3
0008 04 75      1   1395 Int_Vec4:       .DW     Vector4
000A 08 89      1   1396 Int_Vec5:       .DW     ABWigInt
000C            1   1397                 
000C 8F         1 6 1398                 Di
000D 31 00      1 6 1399                 Srp     #Wrk_Io ;select I/O working register set 
000F B0 FE      1 6 1400                 Clr     Sph             ;initialize the stack
0011 E6 FF 80   110 1401                 Ld      Spl,#Stack_Top
0014            1   1402                 
0014 E6 F8 36   110 1403                 Ld      P01m,#P0_03_Adr+P0_47_Out+Stack_In+P1_Adr+Mem_Ext
0017 0C 70      1 6 1404                 Ld      !Port0,#Not_FmenL+Not_ZTestL+Not_RdHdrH+Not_ServoRst
0019            1   1405                 
0019 E6 F6 46   110 1406                 Ld      P2m,#P21_In+P22_In+P26_In
001C 2C 99      1 6 1407                 Ld      !Port2,#Not_StartL+Bsy+Z8_Mem+DrwL_Read
001E            1   1408 
001E E6 F7 51   110 1409                 Ld      P3m,#B0_7_Ser+B1_6_Io+B3_4_Idm+B2_5_Io+Totem_Pol+Par_Off
0021            1   1410                 
0021 EC 19      1 6 1411                 Ld      !rE,#.HIBYTE. RamBank0 ;select ram bank 1
0023 FC 01      1 6 1412                 Ld      !rF,#01
0025 92 EE      112 1413                 Lde     @!!rE,!rE
0027 EE         1 6 1414                 Inc     !rE ;set next Ram adr bit
0028 FC 00      1 6 1415                 Ld      !rF,#00
002A 92 EE      112 1416                 Lde     @!!rE,!rE
002C            1   1417                 
002C EC 10      1 6 1418                 Ld      !rE,#.HIBYTE. $1000 ;save PwrFlg regs temporarily
002E FC 00      1 6 1419                 Ld      !rF,#.LOWBYTE. $1000
0030 DC 04      1 6 1420                 Ld      !rD,#4 ;move 4 registers
0032 CC 2C      1 6 1421                 Ld      !rC,#PwrFlg0
0034 93 CE      118 1422 Start_Loop:     Ldei    @!!rE,@!rC
0036 DA FC      1   1423                 Djnz    !rD,Start_Loop
0038            1   1424                 
0038            1   1425                 .LSTOFF
0038            1   1466                 .LSTON


















        WIDGET.ASSEM            Page   3
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0038            1   1467                 .Page
0038            1   1468                 .FIN
0038            1   1469 
0038            1   1470  Start_RegTest:
0038            1   1471                 
0038 B0 E4      1 6 1472                 Clr     !r4
003A 42 44      1 6 1473                 Or      !r4,!r4         ;quick check
003C EB FE      1   1474                 Jr      Nz,.PC.         ;loop here if can't clear r4
003E            1   1475                 
003E 58 E4      1 6 1476                 Ld      !r5,!r4         ;bootstrap a few registers
0040 68 E4      1 6 1477                 Ld      !r6,!r4         ;    /|\
0042 78 E4      1 6 1478                 Ld      !r7,!r4         ;     |
0044 88 E4      1 6 1479                 Ld      !r8,!r4         ;     |
0046 02 54      1 6 1480                 Add     !r5,!r4         ;     | ( all zeros )
0048 02 65      1 6 1481                 Add     !r6,!r5         ;     |
004A 02 76      1 6 1482                 Add     !r7,!r6         ;     | 
004C 02 87      1 6 1483                 Add     !r8,!r7         ;    \|/
004E EB FE      1   1484                 Jr      Nz,.PC.         ;loop here if can't bootstrap
0050            1   1485                 
0050 4C FF      1 6 1486                 Ld      !r4,#$FF        ;quick check
0052 A6 E4 FF   110 1487                 Cp      !r4,#$FF
0055 EB FE      1   1488                 Jr      Nz,.PC.         ;loop here if can't set r4
0057            1   1489                 
0057 58 E4      1 6 1490                 Ld      !r5,!r4         ;bootstrap a few registers
0059 68 E4      1 6 1491                 Ld      !r6,!r4         ;    /|\
005B 78 E4      1 6 1492                 Ld      !r7,!r4         ;     |
005D 88 E4      1 6 1493                 Ld      !r8,!r4         ;     |
005F 02 54      1 6 1494                 Add     !r5,!r4         ;     | ( all ones )
0061 02 65      1 6 1495                 Add     !r6,!r5         ;     |
0063 02 76      1 6 1496                 Add     !r7,!r6         ;     | 
0065 02 87      1 6 1497                 Add     !r8,!r7         ;    \|/
0067 06 E8 05   110 1498                 Add     !r8,#5          ; 5*(-1) + 5 = 0
006A EB FE      1   1499                 Jr      Nz,.PC.         ;loop here if can't bootstrap
006C            1   1500                 

























        WIDGET.ASSEM            Page   4
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


006C            1   1501                 .Page
006C            1   1502 
006C            1   1503 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
006C            1   1504 ;>
006C            1   1505 ;>      Test the rest of the registers
006C            1   1506 ;>
006C            1   1507 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
006C            1   1508 
006C B0 E4      1 6 1509                 Clr     !r4             ;Load value
006E 5C 02      1 6 1510                 Ld      !r5,#RegLpTimes
0070            1   1511 
0070 88 E4      1 6 1512 RegLp1:         Ld      !r8,!r4         ;remember load value
0072 6C 77      1 6 1513                 Ld      !r6,#RegCount-RegUsed-I_ORegUsed
0074 7C 7F      1 6 1514                 Ld      !r7,#HiRegAdr
0076            1   1515                 
0076 F3 74      1 6 1516 RegLp2:         Ld      @!r7,!r4        ;begin loading ram
0078 00 E7      1 6 1517                 Dec     !r7             ;point to new reg
007A 6A FA      1   1518                 Djnz    !r6,RegLp2
007C            1   1519                 
007C 6C 77      1 6 1520                 Ld      !r6,#RegCount-RegUsed-I_ORegUsed
007E            1   1521                 
007E 7E         1 6 1522 RegLp3:         Inc     !r7
007F E3 47      1 6 1523                 Ld      !r4,@!r7        ;Read regs
0081 A2 48      1 6 1524                 Cp      !r4,!r8
0083 EB FE      1   1525                 Jr      Nz,.PC.         ;Loop here if failure
0085            1   1526                 
0085 6A F7      1   1527                 Djnz    !r6,RegLp3
0087            1   1528                 
0087 4C FF      1 6 1529                 Ld      !r4,#$FF        ;set up for all ones test
0089 5A E5      1   1530                 Djnz    !r5,RegLp1
008B            1   1531                 
008B            1   1532                 .LSTOFF
008B            1   1557                 .LSTON


























        WIDGET.ASSEM            Page   5
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


008B            1   1558                 .Page
008B            1   1559                 .FIN
008B            1   1560 
008B B0 FE      1 6 1561                 Clr     Sph
008D E6 FF 80   110 1562                 Ld      Spl,#$80
0090            1   1563                 
0090 48 FE      1 6 1564                 Ld      !r4,Sph
0092 EB FE      1   1565                 Jr      Nz,.PC.         ;check the loading of Stack Pointer
0094            1   1566                 
0094 A6 FF 80   110 1567                 Cp      Spl,#$80
0097 EB FE      1   1568                 Jr      Nz,.PC.
0099            1   1569                 
0099 4C AA      1 6 1570                 Ld      !r4,#$AA         ;Push/Pop $AA
009B 70 E4      1   1571                 Push    !r4
009D 48 FE      1 6 1572                 Ld      !r4,Sph
009F EB FE      1   1573                 Jr      Nz,.PC.         ;check for decrement of pointer
00A1            1   1574                 
00A1 A6 FF 7F   110 1575                 Cp      Spl,#$7F
00A4 EB FE      1   1576                 Jr      Nz,.PC.
00A6            1   1577                 
00A6 50 E4      110 1578                 Pop     !r4
00A8 A6 E4 AA   110 1579                 Cp      !r4,#$AA
00AB EB FE      1   1580                 Jr      Nz,.PC.
00AD            1   1581                 
00AD 48 FE      1 6 1582                 Ld      !r4,Sph
00AF EB FE      1   1583                 Jr      Nz,.PC.         ;check for increment of pointer
00B1            1   1584                 
00B1 A6 FF 80   110 1585                 Cp      Spl,#$80
00B4 EB FE      1   1586                 Jr      Nz,.PC.
00B6            1   1587                 
00B6 D6 00 B9   120 1588                 Call    Stk_Test        ;check call capability
00B9 48 FF      1 6 1589 Stk_Test:       Ld      !r4,Spl
00BB A6 E4 7E   110 1590 Stk_Test1:      Cp      !r4,#$7E        ;check for double dec on call
00BE EB FE      1   1591                 Jr      Nz,.PC.
00C0            1   1592                 
00C0 4E         1 6 1593                 Inc     !r4             ;point to low address byte
00C1 E3 54      1 6 1594                 Ld      !r5,@!r4        ;load low address byte
00C3 A6 E5 B9   110 1595                 Cp      !r5,#StkTest    ;should be next instruction after call
00C6 EB FE      1   1596                 Jr      Nz,.PC.
00C8            1   1597                 
00C8 E7 E4 CE   1 6 1598                 Ld      @!r4,#Stk_Ret   ;check return capability
00CB AF         114 1599                 Ret
00CC 8B FE      1   1600 Stk_Halt:       Jr      Stk_Halt        ;Halt if pc just got incremented
00CE            1   1601                 
00CE B0 FE      1 6 1602 Stk_Ret:        Clr     Sph             ;initialize the stack
00D0 E6 FF 80   110 1603                 Ld      Spl,#Stack_Top
00D3            1   1604                 
00D3            1   1605                 .LSTOFF
00D3            1   1641                 .LSTON










        WIDGET.ASSEM            Page   6
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


00D3            1   1642                 .Page
00D3            1   1643                 .FIN
00D3            1   1644                 
00D3 4C 16      1 6 1645                 Ld      !P01m_Image,#P0_03_Adr+P0_47_Out+Stack_In+P1_Adr
00D5 6C 1C      1 6 1646                 Ld      !P01m_StMach,#P0_03_Out+P0_47_Out+Stack_In+P1_Tri
00D7 49 F8      1 6 1647                 Ld      P01m,!P01m_Image
00D9            1   1648                 
00D9 E6 F6 46   110 1649                 Ld      P2m,#P21_In+P22_In+P26_In
00DC            1   1650 
00DC 5C 51      1 6 1651                 Ld      !P3m_Image,#B0_7_Ser+B1_6_Io+B3_4_Idm+B2_5_Io+Totem_Pol+Par_Off
00DE 7C 41      1 6 1652                 Ld      !P3m_StMach,#B0_7_Ser+B1_6_Io+B3_4_Io+B2_5_Io+Totem_Pol+Par_Off
00E0 59 F7      1 6 1653                 Ld      P3m,!P3m_Image
00E2            1   1654                 
00E2 8C EF      1 6 1655                 Ld      !Dm_Mask,#$FF-Dm
00E4 9C FE      1 6 1656                 Ld      !Start_Mask,#$FF-Not_StartL
00E6            1   1657                 
00E6 E6 F9 08   110 1658                 Ld      Ipr,#$08 ;GroupA := 0, A>B>C
00E9 B0 FB      1 6 1659                 Clr     Imr     ;disallow interrupts
00EB B0 FA      1 6 1660                 Clr     Irq     ;clear any pending interrupts
00ED            1   1661                 
00ED B0 56      1 6 1662                 Clr     DiskStat
00EF B0 24      1 6 1663                 Clr     Excpt_Stat ;Recovery Off
00F1 B0 5A      1 6 1664                 Clr     BlkStat
00F3 B0 26      1 6 1665                 Clr     RdStat
00F5 B0 27      1 6 1666                 Clr     RdErrCnt
00F7 B0 28      1 6 1667                 Clr     WrStat
00F9 B0 29      1 6 1668                 Clr     WrErrCnt
00FB B0 5B      1 6 1669                 Clr     Cache_Index
00FD E6 57 90   110 1670                 Ld      Seek_Type,#Access_Offset
0100 E6 58 02   110 1671                 Ld      Data_Type,#User_Type
0103 B0 2A      1 6 1672                 Clr     SeekCount
0105 B0 2B      1 6 1673                 Clr     SeekCount+1
0107 B0 23      1 6 1674                 Clr     Free_SlfTst
0109            1   1675                 
0109 EC 10      1 6 1676                 Ld      !rE,#.HIBYTE. Rwi_Value ;load RWI/PC cylinder value
010B FC 08      1 6 1677                 Ld      !rF,#.LOWBYTE. Rwi_Value
010D CC 20      1 6 1678                 Ld      !rC,#Hi_Rwi_Reg
010F C3 CE      118 1679                 Ldci    @!rC,@!!rE
0111 C3 CE      118 1680                 Ldci    @!rC,@!!rE
0113            1   1681                 
0113 E6 F1 C0   110 1682                 Ld      Tmr,#Int_Out ;initialize timers
0116 E6 F3 03   110 1683                 Ld      Pre1,#$3 ;Mod-64, continuos run
0119 E6 F2 8F   110 1684                 Ld      T1,#143 ;interrupt every 10 ms
011C 46 F1 0C   110 1685                 Or      Tmr,#T1_CntEn + T1_Load
011F            1   1686                 
011F 9F         1 6 1687                 Ei              ;kludge for Z8 to do polling
0120 8F         1 6 1688                 Di
0121 E6 FB 20   110 1689                 Ld      Imr,#Timer1 ;allow only Timer1 interrupts
0124            1   1690                 
0124            1   1691                 .LSTOFF
0124            1   1725                 .LSTON








        WIDGET.ASSEM            Page   7
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0124            1   1726                 .Page
0124            1   1727                 .FIN
0124            1   1728 
0124 0C 70      1 6 1729                 Ld      !Port0,#Not_ServoRst+Not_FmenL+Not_ZTestL+Not_RdHdrH
0126 2C 99      1 6 1730                 Ld      !Port2,#Not_StartL+Bsy+Z8_Mem+DrwL_Read
0128            1   1731                 
0128 31 10      1 6 1732                 Srp     #Wrk_Sys     ;context switch
012A            1   1733                 
012A D6 02 03   120 1734                 Call    Clr_BankSwitch
012D            1   1735                 
012D 46 24 10   110 1736                 Or      Excpt_Stat,#PwrRst ;assume a power reset
0130 2C 10      1 6 1737                  Ld     !r2,#.HIBYTE. $1000 ;check saved power flags
0132 3C 00      1 6 1738                  Ld     !r3,#.LOWBYTE. $1000
0134 EC 10      1 6 1739                  Ld     !rE,#.HIBYTE. PassWord
0136 FC 03      1 6 1740                  Ld     !rF,#.LOWBYTE. PassWord
0138 4C 04      1 6 1741                  Ld     !r4,#4 ;check 4 bytes
013A            1   1742                  
013A 82 02      112 1743 PwrRst_Lp:      Lde     !r0,@!!r2 ;get save byte
013C C2 1E      112 1744                 Ldc     !r1,@!!rE ;get a byte of password
013E A0 E2      110 1745                 Incw    !!r2
0140 A0 EE      110 1746                 Incw    !!rE
0142 A2 01      1 6 1747                 Cp      !r0,!r1
0144 EB 05      1   1748                 Jr      Nz,Power_On
0146 4A F2      1   1749                 Djnz    !r4,PwrRst_Lp
0148            1   1750                 
0148 56 24 EF   110 1751                 And     Excpt_Stat,#$FF-PwrRst
014B            1   1752 
014B E6 38 07   110 1753 Power_On:       Ld      Scr_Cntr,#.HIBYTE. 2000
014E E6 39 D0   110 1754                 Ld      Scr_Cntr+1,#.LOWBYTE. 2000
0151            1   1755                 
0151 E6 2C F0   110 1756                 Ld      PwrFlg0,#$F0 ;initialize power-on flags
0154 E6 2D 78   110 1757                 Ld      PwrFlg1,#$78
0157 E6 2E 3C   110 1758                 Ld      PwrFlg2,#$3C
015A E6 2F 1E   110 1759                 Ld      PwrFlg3,#$1E
015D 8D 02 1C   1   1760                 Jp      Main            ;go to main routine
0160            1   1761                 
0160            1   1762                 .LSTOFF
0160            1   1816                 .LSTON





















        WIDGET.ASSEM            Page   8
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0160            1   1817                 .Page
0160            1   1818                 .FIN
0160            1   1819                 
0160            1   1820 RamTest:
0160 4C FF      1 6 1821                 Ld      !r4,#$FF             ;Load value
0162 8C 02      1 6 1822                 Ld      !r8,#RamLpTimes
0164            1   1823                 
0164 D6 01 EE   120 1824 RamLp1:         Call    Dec_Scr_Cnt
0167            1   1825 
0167 58 E4      1 6 1826                 Ld      !r5,!r4         ;remember load value
0169 7C 00      1 6 1827                 Ld      !r7,#.LOWBYTE. RamSize
016B 6C 08      1 6 1828                 Ld      !r6,#.HIBYTE. RamSize
016D BC FF      1 6 1829                 Ld      !rB,#.LOWBYTE. HiRamAdr ;Initialize Ram Ptr
016F AC 17      1 6 1830                 Ld      !rA,#.HIBYTE. ( HiRamAdr+RamOffset )
0171            1   1831                 
0171 92 4A      112 1832 RamLp2:         Lde     @!!rA,!r4       ;begin loading ram
0173 80 EA      110 1833                 Decw    !!rA            ;Point to next Ram location
0175 7A FA      1   1834                 Djnz    !r7,RamLp2
0177 6A F8      1   1835                 Djnz    !r6,RamLp2
0179            1   1836                 
0179 6C 08      1 6 1837                 Ld      !r6,#.HIBYTE. RamSize
017B            1   1838 
017B A0 EA      110 1839 RamLp3:         Incw    !!rA            ;Point to next Ram location to check
017D 82 4A      112 1840                 Lde     !r4,@!!rA       ;Read regs
017F A2 45      1 6 1841                 Cp      !r4,!r5
0181 EB 08      1   1842                 Jr      Nz,RamTestExit  ;Loop here if failure
0183 7A F6      1   1843                 Djnz    !r7,RamLp3
0185 6A F4      1   1844                 Djnz    !r6,RamLp3
0187            1   1845                 
0187 4C 00      1 6 1846                 Ld      !r4,#$00        ;set up for all ones test
0189 8A D9      1   1847                 Djnz    !r8,RamLp1
018B AF         114 1848 RamTestExit:    Ret
018C            1   1849                 
018C            1   1850                 .LSTOFF
018C            1   1892                 .LSTON
























        WIDGET.ASSEM            Page   9
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


018C            1   1893                 .Page
018C            1   1894                 .FIN
018C            1   1895         
018C            1   1896 EpromTest:
018C 48 E0      1 6 1897                 Ld      !r4,!r0 ;make a loop counter out of highaddress
018E            1   1898                 
018E 08 E4      1 6 1899 E_Lp:            Ld     !r0,!r4 ;get bank to test
0190 F0 E0      1 8 1900                  Swap   !r0 ;turn loop count back into highaddress
0192 D6 04 25   120 1901                 Call    LookUp_Rom ;select that bank
0195            1   1902                 
0195 B0 E6      1 6 1903                 Clr     !r6 ;Sum := 0
0197 B0 E7      1 6 1904                 Clr     !r7
0199 8C 10      1 6 1905                 Ld      !r8,#.HIBYTE. EpromSize
019B 9C 00      1 6 1906                 Ld      !r9,#.LOWBYTE. EpromSize
019D            1   1907                 
019D CC 10      1 6 1908                 Ld      !rC,#.HIBYTE. EpromOffset
019F DC 00      1 6 1909                 Ld      !rD,#.LOWBYTE. EpromOffset
01A1            1   1910                 
01A1 C2 0C      112 1911                 Ldc     !r0,@!!rC ;get Eprom[ 0 ]
01A3 60 E0      1 6 1912                 Com     !r0
01A5 02 60      1 6 1913                 Add     !r6,!r0   ;Sum := Sum + 256*Eprom[ 0 ]
01A7            1   1914                 
01A7 A0 EC      110 1915                 Incw    !!rC ;point to Eprom[ 1 ]
01A9 00 E9      1 6 1916                 Dec     !r9 ; account for Eprom[ 0 ]
01AB            1   1917                 
01AB C2 0C      112 1918                 Ldc     !r0,@!!rC ;get Eprom[ 1 ]
01AD 60 E0      1 6 1919                 Com     !r0
01AF 02 70      1 6 1920                 Add     !r7,!r0   ;Sum := Sum + Eprom[ 1 ]
01B1            1   1921                 
01B1 A0 E6      110 1922                 Incw    !!r6 ;do two's complement arithmetic
01B3            1   1923                 
01B3 A0 EC      110 1924                 Incw    !!rC ;point to Eprom[ 2 ]
01B5 00 E9      1 6 1925                 Dec     !r9 ; account for Eprom[ 1 ]
01B7            1   1926                 
01B7 D6 01 EE   120 1927 Eprom_Lp:       Call    Dec_Scr_Cntr
01BA C2 0C      112 1928                 Ldc     !r0,@!!rC ;get Eprom[ i ]
01BC A0 EC      110 1929                 Incw    !!rC
01BE 02 70      1 6 1930                 Add     !r7,!r0 ;Sum := Sum + Eprom[ i ]
01C0 16 E6 00   110 1931                 Adc     !r6,#0
01C3 9A F2      1   1932                 Djnz    !r9,Eprom_Lp
01C5 8A F0      1   1933                 Djnz    !r8,Eprom_Lp
01C7 EB 02      1   1934                 Jr      Nz,Eprom_End
01C9            1   1935                 
01C9 4A C3      1   1936                 Djnz    !r4,E_Lp
01CB            1   1937                 
01CB 8D 04 5F   1   1938 Eprom_End:      Jp      Bank_Ret
01CE            1   1939 
01CE            1   1940                 .LSTOFF
01CE            1   1961                 .LSTON










        WIDGET.ASSEM            Page  10
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


01CE            1   1962                 .Page
01CE            1   1963                 .FIN
01CE            1   1964 
01CE            1   1965 MsWait:
01CE 0C 0A      1 6 1966                 Ld      !r0,#10 ;change LED every 100 ms
01D0 56 FA DF   110 1967 MsWait_1:       And     Irq,#$FF-Timer1 ;clear any pending times
01D3            1   1968                 
01D3 76 FA 20   110 1969 MsWait_Lp:      Tm      Irq,#Timer1 ;wait for timer int
01D6 6B FB      1   1970                 Jr      Z,MsWait_Lp
01D8            1   1971                 
01D8 00 E0      1 6 1972                 Dec     !r0
01DA EB 0D      1   1973                 Jr      Nz,MsWait_Dec
01DC            1   1974                 
01DC 70 E2      1   1975                 Push    !r2 ;save counter
01DE 70 E3      1   1976                 Push    !r3
01E0 D6 03 6D   120 1977                 Call    Invert_Led
01E3 50 E3      110 1978                 Pop     !r3
01E5 50 E2      110 1979                 Pop     !r2
01E7 0C 0A      1 6 1980                 Ld      !r0,#10
01E9            1   1981 
01E9 80 E2      110 1982 MsWait_Dec:     Decw    !!r2 ;count down a unit
01EB EB E3      1   1983                 Jr      Nz,MsWait_1
01ED            1   1984                 
01ED AF         114 1985                 Ret
01EE            1   1986                 
01EE            1   1987                 
01EE 76 FA 20   110 1988 Dec_Scr_Cntr:   Tm      Irq,#Timer1 ;wait for timer interrupt
01F1 6B 0F      1   1989                 Jr      Z,Dec_Scr_End
01F3            1   1990                 
01F3 D6 03 6D   120 1991                 Call    Invert_Led
01F6 56 FA DF   110 1992                 And     Irq,#$FF-Timer1 ;get rid of old interrupt
01F9 08 38      1 6 1993                 Ld      !r0,Scr_Cntr ;check for already zero count
01FB 44 39 E0   110 1994                 Or      !r0,Scr_Cntr+1
01FE 6B 02      1   1995                 Jr      Z,Dec_Scr_End
0200            1   1996                 
0200 80 38      110 1997                 Decw    Scr_Cntr
0202 AF         114 1998 Dec_Scr_End:    Ret
0203            1   1999 
0203            1   2000 
0203 2C 18      1 6 2001 Clr_BankSwitch: Ld      !r2,#.HIBYTE. BankReg
0205 3C 00      1 6 2002                 Ld      !r3,#.LOWBYTE. BankReg
0207 1C 07      1 6 2003                 Ld      !r1,#7 ;clear 7 bits
0209 92 22      112 2004 Clr_B_Lp:       Lde     @!!r2,!r2
020B 2E         1 6 2005                 Inc     !r2 ;next bit's adr is $100 above last one
020C 1A FB      1   2006                 Djnz    !r1,Clr_B_Lp
020E            1   2007                 
020E 08 24      1 6 2008                 Ld      !r0,Excpt_Stat ;clear all but LED state
0210 56 E0 01   110 2009                 And     !r0,#$FF-Led_Mask
0213 D6 03 60   120 2010                 Call    Set_Led
0216            1   2011                 
0216 0C 01      1 6 2012                  Ld     !r0,#Ram1
0218 D6 03 33   120 2013                 Call    Set_RamBank
021B AF         114 2014                 Ret
021C            1   2015 





        WIDGET.ASSEM            Page  11
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


021C            1   2016                 .LSTOFF
021C            1   2053                 .LSTON

























































        WIDGET.ASSEM            Page  12
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


021C            1   2054                 .Page
021C            1   2055                 .FIN
021C            1   2056 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
021C            1   2057 ;>
021C            1   2058 ;>      MAIN
021C            1   2059 ;>
021C            1   2060 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
021C            1   2061 
021C            1   2062 Main:
021C E6 25 FF   110 2063                 Ld      SlfTst_Result,#$FF ;assume all failures at first
021F            1   2064                 
021F D6 01 60   120 2065                 Call    RamTest         ;test external ram
0222 EB 03      1   2066                 Jr      Nz,Main_Eprom    
0224 56 25 7F   110 2067                 And     SlfTst_Result,#$FF-Ram_Fail
0227            1   2068                 
0227 0C 02      1 6 2069 Main_Eprom:      Ld     !r0,#Eprom2
0229 D6 01 8C   120 2070                 Call    EpromTest       ;test external eprom bank 0,1
022C EB 03      1   2071                 Jr      Nz,Main_SelfTst
022E 56 25 BF   110 2072                 And     SlfTst_Result,#$FF-Eprom_Fail
0231            1   2073                 
0231 D6 10 29   120 2074 Main_SelfTst:    Call    ExtStk_Vector ;init external stack
0234            1   2075 
0234 EC 12      1 6 2076                  Ld     !rE,#.HIBYTE. WBlkFence
0236 FC 70      1 6 2077                  Ld     !rF,#.LOWBYTE. WBlkFence
0238 D6 10 19   120 2078                 Call    LdPw_Vector ;set write buffer fence
023B            1   2079                 
023B D6 10 39   120 2080                 Call    ClrStat_Vector ;clear all status'
023E            1   2081                 
023E D6 10 41   120 2082                 Call    SlfTst_Vector ;perform selftest
0241            1   2083                 
0241 76 25 FE   110 2084 Main_LdSpr:     Tm      SlfTst_Result,#$FF-No_SprTbl
0244 6B 05      1   2085                 Jr      Z,Main_Set_R
0246 56 24 7F   110 2086                 And     Excpt_Stat,#$FF-Recovery ;THEN Recovery is off
0249 8B 0C      1   2087                 Jr      Main_Lp1
024B            1   2088                 
024B 46 24 80   110 2089 Main_Set_R:     Or      Excpt_Stat,#Recovery ;ELSE it is ON
024E            1   2090 
024E D6 10 49   120 2091                 Call    SprTbl_Vector
0251            1   2092                 
0251 D6 10 51   120 2093 Main_Cache:     Call    LC_Vector
0254            1   2094                 
0254 D6 10 63   120 2095                 Call    IScan_Vector
0257            1   2096 
0257 D6 02 03   120 2097 Main_Lp1:       Call    Clr_BankSwitch
025A            1   2098                  
025A E6 0A 01   110 2099                  Ld     Wrk_Io+$A,#Init_Response
025D B0 0B      1 6 2100                  Clr    Wrk_Io+$B ;Cmnd_Pending, IBsy := False
025F            1   2101                  
025F 2C 0B      1 6 2102                   Ld    !r2,#.HIBYTE. AB_Start
0261 3C 37      1 6 2103                   Ld    !r3,#.LOWBYTE. AB_Start
0263 D6 0B 37   120 2104                  Call   AB_Start ;initialize the apple bus stuff
0266            1   2105 
0266            1   2106                 .LSTOFF
0266            1   2173                 .LSTON





        WIDGET.ASSEM            Page  13
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0266            1   2174                 .Page
0266            1   2175                 .FIN
0266            1   2176                 
0266 2C 0B      1 6 2177 Clr_Bsy:         Ld     !r2,#.HIBYTE. AB_Return
0268 3C A5      1 6 2178                  Ld     !r3,#.LOWBYTE. AB_Return
026A D6 04 10   120 2179                 Call    Bank_Call
026D            1   2180                 
026D D6 05 E8   120 2181 Sys_Exit:       Call    Ext_Push
0270 D6 12 E7   120 2182                 Call    Ld_Stand_Stat
0273 2C 0B      1 6 2183                  Ld     !r2,#.HIBYTE. AB_Multi_Ret
0275 3C 97      1 6 2184                  Ld     !r3,#.LOWBYTE. AB_Multi_Ret
0277 D6 04 10   120 2185                 Call    Bank_Call
027A            1   2186                 
027A D6 06 07   120 2187 Sys_Ret:        Call    Ext_Pop
027D 76 0B 80   110 2188                 Tm      Wrk_Io+$B,#Cmnd_Pending ;check if legal Multi_Ret
0280 6B 05      1   2189                 Jr      Z,Sys_Ret_Abort
0282            1   2190                 
0282 50 E0      110 2191                 Pop     !r0 ;get AB's return address off the stack
0284 50 E1      110 2192                 Pop     !r1
0286 AF         114 2193                 Ret
0287            1   2194                 
0287 D6 04 80   120 2195 Sys_Ret_Abort:  Call    Abort
028A            1   2196                 
028A            1   2197                 .LSTOFF
028A            1   2219                 .LSTON


































        WIDGET.ASSEM            Page  14
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


028A            1   2220                 .Page
028A            1   2221                 .FIN
028A            1   2222 
028A AF         114 2223 Get_Wr_Data:    Ret
028B            1   2224                 
028B            1   2225                 .LSTOFF
028B            1   2248                 .LSTON




















































        WIDGET.ASSEM            Page  15
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


028B            1   2249                 .Page
028B            1   2250                 .FIN
028B            1   2251 
028B AF         114 2252 Ack_Read:       Ret
028C            1   2253                 
028C            1   2254                 .LSTOFF
028C            1   2292                 .LSTON




















































        WIDGET.ASSEM            Page  16
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


028C            1   2293                 .Page
028C            1   2294                 .FIN
028C            1   2295 
028C            1   2296 
028C 31 00      1 6 2297 Wr_Resident:    Srp     #Wrk_Io
028E            1   2298                 
028E 2C 29      1 6 2299                 Ld      !Port2,#Not_StartL+Bsy+Disk_Mem
0290            1   2300                 
0290 E8 20      1 6 2301                  Ld     !rE,Hi_Rwi_Reg
0292 F8 21      1 6 2302                  Ld     !rF,Lo_Rwi_Reg
0294 24 53 EF   110 2303                  Sub    !rF,Cylinder+1 ;check for  ( > RWI_Cylinder )
0297 34 52 EE   110 2304                  Sbc    !rE,Cylinder
029A 1B 04      1   2305                 Jr      Lt,WPC_Else
029C            1   2306                 
029C AC 7F      1 6 2307                 Ld      !rA,#$7F ;bits inactive
029E 8B 02      1   2308                 Jr      WPC_End
02A0            1   2309                 
02A0 AC 73      1 6 2310 WPC_Else:       Ld      !rA,#$7F-RWI-PC
02A2            1   2311                 
02A2 8B 28      1   2312 WPC_End:        Jr      Rd_Res2
02A4            1   2313                 
02A4            1   2314                 .LSTOFF
02A4            1   2352                 .LSTON




































        WIDGET.ASSEM            Page  17
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


02A4            1   2353                 .Page
02A4            1   2354                 .FIN
02A4            1   2355 
02A4            1   2356 
02A4 31 00      1 6 2357 Fmt_Resident:   Srp     #Wrk_Io
02A6            1   2358                 
02A6 2C 29      1 6 2359                 Ld      !Port2,#Not_StartL+Bsy+Disk_Mem
02A8            1   2360                 
02A8 E8 20      1 6 2361                  Ld     !rE,Hi_Rwi_Reg
02AA F8 21      1 6 2362                  Ld     !rF,Lo_Rwi_Reg
02AC 24 53 EF   110 2363                  Sub    !rF,Cylinder+1 ;check for  ( > RWI_Cylinder )
02AF 34 52 EE   110 2364                  Sbc    !rE,Cylinder
02B2 1B 04      1   2365                 Jr      Lt,FPC_Else
02B4            1   2366                 
02B4 AC FF      1 6 2367                 Ld      !rA,#$FF ;bits inactive
02B6 8B 02      1   2368                 Jr      FPC_End
02B8            1   2369                 
02B8 AC F3      1 6 2370 FPC_Else:       Ld      !rA,#$FF-RWI-PC
02BA            1   2371                 
02BA EC 10      1 6 2372 FPC_End:        Ld      !rE,#.HIBYTE. FormatArray
02BC FC 20      1 6 2373                 Ld      !rF,#.LOWBYTE. FormatArray
02BE            1   2374                 
02BE 8B 10      1   2375                 Jr      Start_StMach
02C0            1   2376                 
02C0            1   2377                 .LSTOFF
02C0            1   2410                 .LSTON

































        WIDGET.ASSEM            Page  18
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


02C0            1   2411                 .Page
02C0            1   2412                 .FIN
02C0            1   2413 
02C0            1   2414 RdHdr_Resident: 
02C0 31 00      1 6 2415                 Srp     #Wrk_Io
02C2            1   2416                 
02C2 AC FF      1 6 2417                 Ld      !rA,#$FF ;bits inactive
02C4            1   2418                 
02C4 8B 04      1   2419                 Jr      Rd_Res1
02C6            1   2420                 
02C6            1   2421                 .LSTOFF
02C6            1   2454                 .LSTON















































        WIDGET.ASSEM            Page  19
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


02C6            1   2455                 .Page
02C6            1   2456                 .FIN
02C6            1   2457 
02C6            1   2458 
02C6            1   2459 Rd_Resident:    
02C6 31 00      1 6 2460                 Srp     #Wrk_Io
02C8 AC 7F      1 6 2461                 Ld      !rA,#$7F ;bits inactive
02CA            1   2462                 
02CA 2C A9      1 6 2463 Rd_Res1:        Ld      !Port2,#Not_StartL+Bsy+Disk_Mem+DrwL_Read
02CC            1   2464                 
02CC EC 10      1 6 2465 Rd_Res2:        Ld      !rE,#.HIBYTE. ReadArray
02CE FC 00      1 6 2466                 Ld      !rF,#.LOWBYTE. ReadArray
02D0            1   2467                 
02D0            1   2468 ;               \ /  ;In-Line code for Speed!!
02D0            1   2469                 .LSTOFF
02D0            1   2508                 .LSTON











































        WIDGET.ASSEM            Page  20
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


02D0            1   2509                 .Page
02D0            1   2510                 .FIN
02D0            1   2511                 
02D0            1   2512 Start_StMach:
02D0 92 EE      112 2513                 Lde     @!!rE,!rE       ;set buffer address
02D2            1   2514                 
02D2 79 F7      1 6 2515                 Ld      P3m,!P3m_StMach
02D4 52 38      1 6 2516                 And     !Port3,!Dm_Mask  ;set DM/IoPort Low
02D6            1   2517                 
02D6 69 F8      1 6 2518                 Ld      P01m,!P01m_StMach
02D8 08 EA      1 6 2519                 Ld      !Port0,!rA
02DA            1   2520                 
02DA 76 E3 02   110 2521 St_Res_1:       Tm      !Port3,#SectorMark  ;test for sector mark
02DD EB FB      1   2522                 Jr      Nz,St_Res_1
02DF            1   2523                 
02DF 52 29      1 6 2524                 And     !Port2,!Start_Mask        ;start state machine
02E1            1   2525                 
02E1 AC 01      1 6 2526                 Ld      !rA,#Not_StartL
02E3 BC 02      1 6 2527                 Ld      !rB,#Not_EccErr
02E5 EC 08      1 6 2528                 Ld      !rE,#SectDnL    ;load mask
02E7 FC 02      1 6 2529                 Ld      !rF,#SectorMark
02E9 E6 1A 15   110 2530                 Ld      Wrk_Sys+$A,#( NbrSctrs+2 ) ;timeout after 21 sectors
02EC D6 03 93   120 2531                 Call    Set_Dmt
02EF            1   2532                 
02EF 72 3F      1 6 2533 St_Res_2:       Tm      !Port3,!rF               ;count sector marks
02F1 6B 08      1   2534                 Jr      Z,St_Res_3
02F3 00 1A      1 6 2535                 Dec     Wrk_Sys+$A
02F5 6B 0C      1   2536                 Jr      Z,St_Res_4
02F7            1   2537                 
02F7 72 3F      1 6 2538 St_Res_25:      Tm      !Port3,!rF        
02F9 EB FC      1   2539                 Jr      Nz,St_Res_2_5   ;wait for mark to go away
02FB            1   2540                 
02FB 62 3E      1 6 2541 St_Res_3:       Tcm     !Port3,!rE  ;wait for state machine to finish
02FD 6B F0      1   2542                 Jr      Z,St_Res_2
02FF 62 3E      1 6 2543                 Tcm     !Port3,!rE  ;sample it twice
0301 6B EC      1   2544                 Jr      Z,St_Res_2
0303            1   2545                 
0303 49 F8      1 6 2546 St_Res_4:       Ld      P01m,!P01m_Image
0305 2C 98      1 6 2547                 Ld      !Port2,#Bsy+Z8_Mem+DrwL_Read
0307 59 F7      1 6 2548                 Ld      P3m,!P3m_Image
0309            1   2549                 
0309 CC 1F      1 6 2550                 Ld      !rC,#.HIBYTE. StatusPort
030B DC 00      1 6 2551                 Ld      !rD,#.LOWBYTE. StatusPort
030D 82 FC      112 2552                 Lde     !rF,@!!rC
030F            1   2553                 
030F 72 2B      1 6 2554                 Tm      !Port2,!rB
0311 6B 08      1   2555                 Jr      Z,Res_EccErr
0313            1   2556                 
0313 42 2A      1 6 2557 Res_StMach:     Or      !Port2,!rA       ;reset state machine
0315 8F         1 6 2558                 Di                       ;clear the dead man timer
0316            1   2559                 
0316 31 10      1 6 2560                 Srp     #Wrk_Sys
0318 08 0F      1 6 2561                 Ld      !r0,Wrk_Io+$F ;return StMach status
031A AF         114 2562                 Ret





        WIDGET.ASSEM            Page  21
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


031B            1   2563                 
031B            1   2564                 
031B 76 56 20   110 2565 Res_EccErr:     Tm      DiskStat,#Wr_Op
031E EB F3      1   2566                 Jr      Nz,Res_StMach
0320 56 EF BF   110 2567                 And     !rF,#$FF-WrtNvldL ;if ECC error
0323 8B EE      1   2568                 Jr      Res_StMach
0325            1   2569                 
0325            1   2570                 .LSTOFF
0325            1   2596                 .LSTON


















































        WIDGET.ASSEM            Page  22
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0325            1   2597                 .Page
0325            1   2598                 .FIN
0325            1   2599                 
0325            1   2600 Sub3:
0325 22 2E      1 6 2601                 Sub     !r2,!rE
0327 32 1D      1 6 2602                 Sbc     !r1,!rD
0329 32 0C      1 6 2603                 Sbc     !r0,!rC
032B AF         114 2604                 Ret
032C            1   2605 
032C            1   2606 Add3:
032C 02 2E      1 6 2607                 Add     !r2,!rE
032E 12 1D      1 6 2608                 Adc     !r1,!rD
0330 12 0C      1 6 2609                 Adc     !r0,!rC
0332            1   2610                 
0332 AF         114 2611                 Ret
0333            1   2612                 
0333            1   2613                 .LSTOFF
0333            1   2641                 .LSTON









































        WIDGET.ASSEM            Page  23
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0333            1   2642                 .Page
0333            1   2643                 .FIN
0333            1   2644 
0333 A6 E0 04   110 2645 Set_RamBank:    Cp      !r0,#4
0336 1B 03      1   2646                 Jr      Lt,Set_RB_Start
0338            1   2647                 
0338 D6 04 80   120 2648                 Call    Abort
033B            1   2649                 
033B 2C 03      1 6 2650 Set_RB_Start:   Ld      !r2,#.HIBYTE. Ram_Table
033D 3C 58      1 6 2651                 Ld      !r3,#.LOWBYTE. Ram_Table
033F 90 E0      1 6 2652                 Rl      !r0 ;multiply index by 2
0341 02 30      1 6 2653                 Add     !r3,!r0 ;index into table
0343 16 E2 00   110 2654                 Adc     !r2,#0
0346 C2 12      112 2655                 Ldc     !r1,@!!r2
0348 A0 E2      110 2656                 Incw    !!r2
034A C2 02      112 2657                 Ldc     !r0,@!!r2
034C            1   2658                 
034C 2C 19      1 6 2659                 Ld      !r2,#.HIBYTE. RamBank0 ;set the adr bits
034E 38 E0      1 6 2660                 Ld      !r3,!r0
0350 92 32      112 2661                 Lde     @!!r2,!r3
0352 2E         1 6 2662                 Inc     !r2
0353 38 E1      1 6 2663                 Ld      !r3,!r1
0355 92 32      112 2664                 Lde     @!!r2,!r3
0357 AF         114 2665                 Ret
0358            1   2666                 
0358 00 00      1   2667 Ram_Table:      .DB     0,0 ;adr 13 := 0, adr 12 := 0 
035A 00 01      1   2668                 .DB     0,1 ;adr 13 := 0, adr 12 := 1
035C 01 00      1   2669                 .DB     1,0 ;adr 13 := 1, adr 12 := 0 
035E 01 01      1   2670                 .DB     1,1 ;adr 13 := 1, adr 12 := 1
0360            1   2671                 
0360            1   2672                 .LSTOFF
0360            1   2700                 .LSTON



























        WIDGET.ASSEM            Page  24
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0360            1   2701                 .Page
0360            1   2702                 .FIN
0360            1   2703 
0360            1   2704 Set_Led:
0360 56 24 FE   110 2705                 And     Excpt_Stat,#$FF-Led_Stat
0363 44 E0 24   110 2706                 Or      Excpt_Stat,!r0
0366 2C 18      1 6 2707                 Ld     !r2,#.HIBYTE. Led
0368 38 E0      1 6 2708                 Ld     !r3,!r0
036A 92 32      112 2709                 Lde    @!!r2,!r3
036C            1   2710                 
036C AF         114 2711                 Ret
036D            1   2712                 
036D 08 24      1 6 2713 Invert_Led:      Ld     !r0,Excpt_Stat
036F B6 E0 01   110 2714                  Xor    !r0,#$FF-Led_Mask ;invert only the Led bit
0372 8B EC      1   2715                 Jr     Set_Led
0374            1   2716                  
0374 2C 00      1 6 2717 Led_Wait:        Ld     !r2,#.HIBYTE. 50 ;wait a second
0376 3C 32      1 6 2718                  Ld     !r3,#.LOWBYTE. 50
0378 D6 01 CE   120 2719                 Call    MsWait
037B AF         114 2720                 Ret
037C            1   2721                 
037C            1   2722                 .LSTOFF
037C            1   2742                 .LSTON




































        WIDGET.ASSEM            Page  25
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


037C            1   2743                 .Page
037C            1   2744                 .FIN
037C            1   2745 
037C            1   2746 LoadStatus:
037C 2C 1F      1 6 2747                 Ld      !r2,#.HIBYTE. Status_Port
037E 3C 00      1 6 2748                 Ld      !r3,#.LOWBYTE. Status_Port
0380 82 02      112 2749                 Lde     !r0,@!!r2
0382            1   2750                 
0382 AF         114 2751                 Ret
0383            1   2752                 
0383            1   2753                 .LSTOFF
0383            1   2781                 .LSTON















































        WIDGET.ASSEM            Page  26
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0383            1   2782                 .Page
0383            1   2783                 .FIN
0383            1   2784 
0383            1   2785 SetStatus:
0383 2C 14      1 6 2786                 Ld      !r2,#.HIBYTE. CStatus0
0385 3C 95      1 6 2787                 Ld      !r3,#.LOWBYTE. CStatus0
0387 02 30      1 6 2788                 Add     !r3,!r0
0389 16 E2 00   110 2789                 Adc     !r2,#0
038C 82 02      112 2790                 Lde     !r0,@!!r2
038E 42 01      1 6 2791                 Or      !r0,!r1
0390 92 02      112 2792                 Lde     @!!r2,!r0
0392 AF         114 2793                 Ret
0393            1   2794                 
0393            1   2795                 .LSTOFF
0393            1   2827                 .LSTON












































        WIDGET.ASSEM            Page  27
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0393            1   2828                 .Page
0393            1   2829                 .FIN
0393            1   2830                 
0393            1   2831 Set_Dmt:
0393 8F         1 6 2832                 Di                              ;enter critical section
0394            1   2833                 
0394 E6 36 01   110 2834                 Ld      Dmt_Counter,#.HIBYTE. Dmt_Val
0397 E6 37 F4   110 2835                 Ld      Dmt_Counter+1,#.LOWBYTE. Dmt_Val
039A            1   2836                 
039A 56 FA DF   110 2837                 And     Irq,#$FF-Timer1 ;clear old events
039D 9F         1 6 2838                 Ei
039E AF         114 2839                 Ret
039F            1   2840                 
039F            1   2841                 .LSTOFF
039F            1   2867                 .LSTON












































        WIDGET.ASSEM            Page  28
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


039F            1   2868                 .Page
039F            1   2869                 .FIN
039F            1   2870                 
039F            1   2871 Clr_Dmt:
039F 8F         1 6 2872                 Di                              ;enter critical section
03A0 AF         114 2873                 Ret
03A1            1   2874                 
03A1            1   2875                 .LSTOFF
03A1            1   2894                 .LSTON


















































        WIDGET.ASSEM            Page  29
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


03A1            1   2895                 .Page
03A1            1   2896                 .FIN
03A1            1   2897 
03A1 D6 02 03   120 2898 FreeP_Leave:    Call    Clr_BankSwitch ;get to a known state
03A4            1   2899 
03A4 2C 0B      1 6 2900                  Ld     !r2,#.HIBYTE. AB_Main
03A6 3C 45      1 6 2901                  Ld     !r3,#.LOWBYTE. AB_Main
03A8 D6 04 10   120 2902                 Call    Bank_Call
03AB            1   2903                 
03AB            1   2904                 .LSTOFF
03AB            1   2984                 .LSTON
















































        WIDGET.ASSEM            Page  30
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


03AB            1   2985                 .Page
03AB            1   2986                 .FIN
03AB            1   2987                 
03AB            1   2988 FormatBlock:
03AB B0 E9      1 6 2989                 Clr     !r9     ;clear booleans
03AD            1   2990                 
03AD 2C 10      1 6 2991 FmtBlk_Rpt:     Ld      !r2,#.HIBYTE. FmtDelay
03AF 3C 07      1 6 2992                 Ld      !r3,#.LOWBYTE. FmtDelay
03B1 C2 12      112 2993                 Ldc     !r1,@!!r2
03B3 2C 10      1 6 2994                 Ld      !r2,#.HIBYTE. FormatArray ;initialize gaps
03B5 3C 20      1 6 2995                 Ld      !r3,#.LOWBYTE. FormatArray
03B7 B0 E0      1 6 2996                 Clr     !r0
03B9 92 02      112 2997 FmtBlk_1:       Lde     @!!r2,!r0
03BB A0 E2      110 2998                 Incw    !!r2
03BD 1A FA      1   2999                 Djnz    !r1,FmtBlk_1
03BF            1   3000                 
03BF 2C 10      1 6 3001                 Ld      !r2,#.HIBYTE. FHdrSync
03C1 3C 3A      1 6 3002                 Ld      !r3,#.LOWBYTE. FHdrSync
03C3 0C 01      1 6 3003                 Ld      !r0,#$01        ;load header sync
03C5 92 02      112 3004                 Lde     @!!r2,!r0
03C7 A0 E2      110 3005                 Incw    !!r2
03C9 B0 E0      1 6 3006                 Clr     !r0
03CB 92 02      112 3007                 Lde     @!!r2,!r0
03CD A0 E2      110 3008                 Incw    !!r2
03CF            1   3009                 
03CF D6 10 10   120 3010                 Call    LH_Vector
03D2            1   3011                 
03D2 2C 10      1 6 3012                 Ld      !r2,#.HIBYTE. FDataSync ;load data sync bit
03D4 3C 50      1 6 3013                 Ld      !r3,#.LOWBYTE. FDataSync
03D6 0C 01      1 6 3014                 Ld      !r0,#$01
03D8 92 02      112 3015                 Lde     @!!r2,!r0
03DA            1   3016                 
03DA D6 02 A4   120 3017                 Call    Fmt_Resident     ;go internal to the Z8
03DD            1   3018 
03DD 18 E0      1 6 3019                 Ld      !r1,!r0         ;CASE Status.State
03DF 56 E1 0F   110 3020                 And     !r1,#$0F
03E2 A6 E1 0A   110 3021                 Cp      !r1,#NormFmt_State
03E5 6B 08      1   3022                 Jr      Z,Fmt_Norm
03E7            1   3023                 
03E7 D6 04 E7   120 3024                  Call   Reset_StMach
03EA A8 E0      1 6 3025                  Ld     !rA,!r0
03EC D6 04 80   120 3026                 Call    Abort
03EF            1   3027                 
03EF 18 E0      1 6 3028 Fmt_Norm:       Ld      !r1,!r0         ;IF ServorErr OR NOT( ServoRdy )
03F1 76 E1 10   110 3029                 Tm      !r1,#ServoErr
03F4 EB 05      1   3030                 Jr      Nz,Fmt_ServoErr
03F6 76 E1 20   110 3031                 Tm      !r1,#ServoRdy
03F9 EB 05      1   3032                 Jr      Nz,Fmt_SrvoOk
03FB            1   3033                 
03FB 46 E9 C0   110 3034 Fmt_ServoErr:   Or      !r9,#FmtError + FmtSrvoErr ; THEN FmtError AND FmtSrvoErr
03FE 8B 08      1   3035                 Jr      FmtBlk_End
0400            1   3036                 
0400 76 E0 40   110 3037 Fmt_SrvoOk:    Tm      !r0,#WrtNvldL    ;IF Status.WrtNvldL
0403 EB 03      1   3038                 Jr      Nz,FmtBlk_End





        WIDGET.ASSEM            Page  31
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0405            1   3039                 
0405 46 E9 80   110 3040                 Or      !r9,#FmtError
0408            1   3041                 
0408 08 E9      1 6 3042 FmtBlk_End:     Ld      !r0,!r9 ;send status back to caller
040A 99 28      1 6 3043                 Ld      WrStat,!r9
040C            1   3044                 
040C 66 E0 80   110 3045                 Tcm     !r0,#FmtError ;set zero flag if error
040F AF         114 3046                 Ret
0410            1   3047                 
0410            1   3048                 .LSTOFF
0410            1   3096                 .LSTON
















































        WIDGET.ASSEM            Page  32
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0410            1   3097                 .Page
0410            1   3098                 .FIN
0410            1   3099 
0410            1   3100 Bank_Call:
0410 E4 FD 45   110 3101                 Ld      Wrk_Scr+$5,Rp
0413 E4 FD 30   110 3102                 Ld      Wrk_Sys2+$0,Rp ;save Rp for reference later
0416 31 30      1 6 3103                 Srp     #Wrk_Sys2
0418            1   3104                 
0418 06 E0 02   110 3105                 Add     !r0,#2 ;get reg 2 in original Rp
041B E3 00      1 6 3106                 Ld      !r0,@!r0 ;get hibyte of called adr
041D D6 04 25   120 3107                 Call    LookUp_Rom
0420            1   3108                 
0420 E4 45 FD   110 3109                 Ld      Rp,Wrk_Scr+$5
0423 30 E2      1 8 3110                 Jp      @!r2
0425            1   3111                 
0425            1   3112                 .LSTOFF
0425            1   3143                 .LSTON










































        WIDGET.ASSEM            Page  33
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0425            1   3144                 .Page
0425            1   3145                 .FIN
0425            1   3146                 
0425 76 E0 80   110 3147 LookUp_Rom:     Tm      !r0,#$80 ;check for adr out of range
0428 EB 08      1   3148                 Jr      Nz,LU_Abort
042A 56 E0 70   110 3149                 And     !r0,#$70 ;mask off unnecessary stuff from address
042D A6 E0 20   110 3150                 Cp      !r0,#$20
0430 2B 03      1   3151                 Jr      Le,BC_1
0432            1   3152                 
0432 D6 04 80   120 3153 LU_Abort:       Call    Abort
0435            1   3154 
0435 2C 04      1 6 3155 BC_1:           Ld      !r2,#.HIBYTE. Rom_Table
0437 3C 55      1 6 3156                 Ld      !r3,#.LOWBYTE. Rom_Table
0439 F0 E0      1 8 3157                 Swap    !r0 ;turn highaddress into index value
043B 90 E0      1 6 3158                 Rl      !r0 ;multiply index by 2 { 2 byte/element table }
043D 02 30      1 6 3159                 Add     !r3,!r0 ;index into table
043F 16 E2 00   110 3160                 Adc     !r2,#0
0442 C2 12      112 3161                 Ldc     !r1,@!!r2 ;get rom address values
0444 A0 E2      110 3162                 Incw    !!r2
0446 C2 02      112 3163                 Ldc     !r0,@!!r2
0448            1   3164                 
0448 2C 1E      1 6 3165                 Ld      !r2,#.HIBYTE. RomBank0
044A 38 E0      1 6 3166                 Ld      !r3,!r0
044C 92 32      112 3167                 Lde     @!!r2,!r3 ;set EpromBank0,1
044E 2C 1D      1 6 3168                 Ld      !r2,#.HIBYTE. RomBank2
0450 38 E1      1 6 3169                 Ld      !r3,!r1
0452 92 32      112 3170                 Lde     @!!r2,!r3 ;set EpromBank2,3
0454 AF         114 3171                 Ret
0455            1   3172                 
0455 00 00      1   3173 RomTable:       .DB     0,0 ;Adr13 := 0, Adr12 := 0
0457 00 00      1   3174                 .DB     0,0 ;Adr13 := 0, Adr12 := 0
0459 00 01      1   3175                 .DB     0,1 ;Adr13 := 0, Adr12 := 1
045B 01 00      1   3176                 .DB     1,0 ;Adr13 := 1, Adr12 := 0
045D 01 01      1   3177                 .DB     1,1 ;Adr13 := 1, Adr12 := 1
045F            1   3178                 
045F            1   3179                 .LSTOFF
045F            1   3208                 .LSTON






















        WIDGET.ASSEM            Page  34
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


045F            1   3209                 .Page
045F            1   3210                 .FIN
045F            1   3211 
045F            1   3212 Bank_Ret:
045F E4 FC 46   110 3213                 Ld      Wrk_Scr+$6,Flags
0462 E4 FD 45   110 3214                 Ld      Wrk_Scr+$5,Rp
0465 31 30      1 6 3215                 Srp     #Wrk_Sys2
0467            1   3216                 
0467 18 FF      1 6 3217                 Ld      !r1,Spl ;get location of return adr
0469 E3 01      1 6 3218                 Ld      !r0,@!r1
046B D6 04 25   120 3219                 Call    LookUp_Rom
046E            1   3220 
046E E4 45 FD   110 3221                 Ld      Rp,Wrk_Scr+$5
0471 E4 46 FC   110 3222                 Ld      Flags,Wrk_Scr+$6
0474 AF         114 3223                 Ret
0475            1   3224                 
0475            1   3225                 .LSTOFF
0475            1   3253                 .LSTON









































        WIDGET.ASSEM            Page  35
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0475            1   3254                 .Page
0475            1   3255                 .FIN
0475            1   3256                 
0475            1   3257 Vector0:
0475            1   3258 Vector1:
0475            1   3259 Vector2:
0475            1   3260 Vector3:
0475            1   3261 Vector4:
0475 31 10      1 6 3262                 Srp     #Wrk_Sys
0477 50 E9      110 3263                 Pop     !r9     ;pop flags
0479 50 EA      110 3264                 Pop     !rA     ;pop return address
047B 50 EB      110 3265                 Pop     !rB
047D D6 04 80   120 3266                 Call    Abort
0480            1   3267                 
0480            1   3268                 .LSTOFF
0480            1   3323                 .LSTON











































        WIDGET.ASSEM            Page  36
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0480            1   3324                 .Page
0480            1   3325                 .FIN
0480            1   3326 
0480            1   3327 Abort:
0480 8F         1 6 3328                 Di
0481            1   3329                  
0481 50 EE      110 3330                 Pop     !rE ;remember who called us
0483 50 EF      110 3331                 Pop     !rF
0485 70 FD      1   3332                 Push    Rp  ;save context
0487 31 40      1 6 3333                 Srp     #Wrk_Scr
0489            1   3334                 
0489 D6 02 03   120 3335                 Call    Clr_BankSwitch
048C            1   3336                 
048C 50 E0      110 3337                 Pop     !r0 ;get caller's context from stack
048E 1C 10      1 6 3338                 Ld      !r1,#16 ;load 16 locations
0490 EC 16      1 6 3339                 Ld      !rE,#.HIBYTE. Abort_Stat
0492 FC D8      1 6 3340                 Ld      !rF,#.LOWBYTE. Abort_Stat
0494            1   3341                 
0494 93 0E      118 3342 Abort_Lp1:      Ldei    @!!rE,@!r0
0496 1A FC      1   3343                 Djnz    !r1,Abort_Lp1
0498            1   3344                 
0498 31 10      1 6 3345                 Srp     #Wrk_Sys
049A B0 FE      1 6 3346                 Clr     Sph ;clean up the stack
049C E6 FF 80   110 3347                 Ld      Spl,#Stack_Top
049F            1   3348                 
049F D6 10 29   120 3349                 Call    ExtStk_Vector
04A2            1   3350                 
04A2 D6 10 31   120 3351                 Call    ZrRd_Vector
04A5            1   3352                 
04A5 EC 12      1 6 3353                  Ld     !rE,#.HIBYTE. WBlkFence ;re-write the write block fence
04A7 FC 70      1 6 3354                  Ld     !rF,#.LOWBYTE. WBlkFence
04A9 D6 10 19   120 3355                 Call    LdPw_Vector
04AC            1   3356                 
04AC D6 04 B9   120 3357 Abt_Stat_Ld:    Call    SS_Abort
04AF D6 12 E7   120 3358                 Call    Ld_Stand_Stat
04B2            1   3359                 
04B2 2C 0B      1 6 3360                  Ld     !r2,#.HIBYTE. Abus_Abort
04B4 3C E5      1 6 3361                  Ld     !r3,#.LOWBYTE. Abus_Abort
04B6 D6 04 10   120 3362                 Call    Bank_Call
04B9            1   3363                 
04B9            1   3364                 .LSTOFF
04B9            1   3389                 .LSTON

















        WIDGET.ASSEM            Page  37
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


04B9            1   3390                 .Page
04B9            1   3391                 .FIN
04B9            1   3392 
04B9 0C 01      1 6 3393 SS_Abort:        Ld     !r0,#1 ;byte 1
04BB 1C 01      1 6 3394                  Ld     !r1,#Stat_Abort
04BD D6 03 83   120 3395                 Call    SetStatus
04C0 0C 00      1 6 3396 SS_OpFail:       Ld     !r0,#0 ;byte 0
04C2 1C 01      1 6 3397                  Ld     !r1,#Op_Failed
04C4 D6 03 83   120 3398 SS_Set:         Call    SetStatus
04C7 AF         114 3399                 Ret
04C8            1   3400                 
04C8 0C 03      1 6 3401 SS_RdCnt:       Ld      !r0,#3 ;byte 3
04CA 18 27      1 6 3402                 Ld      !r1,RdErrCnt
04CC 8B F6      1   3403                 Jr      SS_Set
04CE            1   3404                 
04CE 0C 00      1 6 3405 SS_ReadErr:      Ld     !r0,#0 ;byte 0
04D0 1C 08      1 6 3406                  Ld     !r1,#Stat_Rd_Err
04D2 D6 03 83   120 3407                 Call    SetStatus
04D5 0C 03      1 6 3408                  Ld     !r0,#3
04D7 18 27      1 6 3409                  Ld     !r1,RdErrCnt
04D9 8B E9      1   3410                 Jr      SS_Set
04DB            1   3411                 
04DB 0C 00      1 6 3412 SS_NoHdr:       Ld      !r0,#0 ;byte 0
04DD 1C 04      1 6 3413                 Ld      !r1,#Stat_NoHdr
04DF 8B E3      1   3414                 Jr      SS_Set
04E1            1   3415                 
04E1 0C 01      1 6 3416 SS_SprWarn:     Ld      !r0,#1 ;byte 1
04E3 1C 20      1 6 3417                 Ld      !r1,#SprBlk_Warn
04E5 8B DD      1   3418                 Jr      SS_Set
04E7            1   3419                 
04E7            1   3420                 .LSTOFF
04E7            1   3453                 .LSTON



























        WIDGET.ASSEM            Page  38
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


04E7            1   3454                 .Page
04E7            1   3455                 .FIN
04E7            1   3456 
04E7            1   3457 Reset_StMach:
04E7 70 FD      1   3458                 Push    Rp ;save context
04E9 31 00      1 6 3459                 Srp     #Wrk_Io
04EB            1   3460                 
04EB 56 E0 BF   110 3461                 And     !Port0,#$FF-Not_ZTestL ;asset Z8TestL
04EE            1   3462                 
04EE EC 10      1 6 3463                 Ld      !rE,#16 ;i := 16
04F0            1   3464                 
04F0 46 E3 40   110 3465 Res_StM_Lp:     Or      !Port3,#Zrwck ;set clock
04F3 56 E3 BF   110 3466                 And     !Port3,#$FF-Zrwck ;clear clock
04F6 EA F8      1   3467                 Djnz    !rE,Res_StM_Lp
04F8            1   3468                 
04F8 46 E0 00   110 3469                 Or      !Port0,#ZTestL ;deassert Z8TestL
04FB 46 E0 40   110 3470                 Or      !Port0,#Zrwck ;set clock
04FE            1   3471                 
04FE 50 FD      110 3472                 Pop     Rp
0500 AF         114 3473                 Ret
0501            1   3474                 
0501            1   3475                 .LSTOFF
0501            1   3477                 .LSTON
0501 00 00      1   3478 Int_Version:    .DB     $00, $00
0503            1   3479                 .LSTOFF
0503            1   3512                 .LSTON

































        WIDGET.ASSEM            Page  39
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0503            1   3513                 .Page
0503            1   3514                 .FIN
0503            1   3515 
0503            1   3516 
0503 E6 57 90   110 3517 ReSeek:         Ld      SeekType,#Access_Offset
0506 80 2A      110 3518                 Decw    SeekCount ;account for zero track seek
0508            1   3519                 
0508 C8 52      1 6 3520                 Ld      !rC,Cylinder
050A D8 53      1 6 3521                 Ld      !rD,Cylinder+1
050C E8 54      1 6 3522                 Ld      !rE,Head
050E F8 55      1 6 3523                 Ld      !rF,Sector
0510            1   3524 
0510 2C 10      1 6 3525 New_Seek:        Ld     !r2,#.HIBYTE. Seek_Vector
0512 3C 94      1 6 3526                  Ld     !r3,#.LOWBYTE. Seek_Vector
0514 D6 04 10   120 3527                 Call    Bank_Call
0517 8D 04 5F   1   3528                 Jp      Bank_Ret
051A            1   3529                 
051A            1   3530                 .LSTOFF
051A            1   3564                 .LSTON








































        WIDGET.ASSEM            Page  40
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


051A            1   3565                 .Page
051A            1   3566                 .FIN
051A            1   3567 
051A            1   3568 Load_Header:
051A 0C 52      1 6 3569                 Ld      !r0,#Cylinder     ;load header: hi cylinder
051C 93 02      118 3570                 Ldei    @!!r2,@!r0
051E            1   3571                 
051E 93 02      118 3572                 Ldei    @!!r2,@!r0       ;load lo cylinder
0520            1   3573                 
0520 E3 10      1 6 3574                 Ld      !r1,@!r0        ;Head
0522 F0 E1      1 8 3575                 Swap    !r1
0524 90 E1      1 6 3576                 Rl      !r1
0526 90 E1      1 6 3577                 Rl      !r1
0528            1   3578                 
0528 0E         1 6 3579                 Inc     !r0
0529 43 10      1 6 3580                 Or      !r1,@!r0        ;merge in Sector
052B            1   3581                 
052B 92 12      112 3582                 Lde     @!!r2,!r1       ;load Head/Sector
052D A0 E2      110 3583                 Incw    !!r2
052F            1   3584                 
052F 08 52      1 6 3585                 Ld      !r0,Cylinder    ;Not( hi cylinder )
0531 60 E0      1 6 3586                 Com     !r0
0533 92 02      112 3587                 Lde     @!!r2,!r0
0535 A0 E2      110 3588                 Incw    !!r2
0537            1   3589                 
0537 08 53      1 6 3590                 Ld      !r0,Cylinder+1  ;Not( lo cylinder )
0539 60 E0      1 6 3591                 Com     !r0
053B 92 02      112 3592                 Lde     @!!r2,!r0
053D A0 E2      110 3593                 Incw    !!r2
053F            1   3594                 
053F 60 E1      1 6 3595                 Com     !r1             ;Not( Head/Sector )
0541 92 12      112 3596                 Lde     @!!r2,!r1
0543 A0 E2      110 3597                 Incw    !!r2
0545            1   3598                 
0545 AF         114 3599                 Ret
0546            1   3600                 
0546            1   3601                 .LSTOFF
0546            1   3621                 .LSTON





















        WIDGET.ASSEM            Page  41
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0546            1   3622                 .Page
0546            1   3623                 .FIN
0546            1   3624                 
0546            1   3625 Load_Logical:
0546 2C 14      1 6 3626                 Ld      !r2,#.HIBYTE. LogicalBlock
0548 3C A1      1 6 3627                 Ld      !r3,#.LOWBYTE. LogicalBlock
054A 1C 03      1 6 3628                 Ld      !r1,#3
054C 08 FD      1 6 3629                 Ld      !r0,Rp
054E 46 E0 0C   110 3630                 Or      !r0,#$0C
0551            1   3631                 
0551 83 02      118 3632 Load_Log_Lp:    Ldei    @!r0,@!!r2
0553 1A FC      1   3633                 Djnz    !r1,Load_Log_Lp
0555            1   3634                 
0555 AF         114 3635                 Ret
0556            1   3636                 
0556            1   3637                 .LSTOFF
0556            1   3670                 .LSTON










































        WIDGET.ASSEM            Page  42
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0556            1   3671                 .Page
0556            1   3672                 .FIN
0556            1   3673 
0556            1   3674 Chk_Chk_Byte:
0556 B0 E0      1 6 3675                 Clr     !r0
0558            1   3676                 
0558 82 2E      112 3677 ChkB_Lp1:       Lde     !r2,@!!rE
055A 02 02      1 6 3678                 Add     !r0,!r2
055C A0 EE      110 3679                 Incw    !!rE
055E 8A F8      1   3680                 Djnz    !r8,ChkB_Lp1
0560            1   3681                 
0560 60 E0      1 6 3682                 Com     !r0
0562 82 1E      112 3683                 Lde     !r1,@!!rE
0564 A2 01      1 6 3684                 Cp      !r0,!r1         ;set/clear zero flag
0566 AF         114 3685                 Ret
0567            1   3686                 
0567            1   3687                 .LSTOFF
0567            1   3719                 .LSTON









































        WIDGET.ASSEM            Page  43
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0567            1   3720                 .Page
0567            1   3721                 .FIN
0567            1   3722 
0567            1   3723 Gen_Chk_Byte:
0567 B0 E0      1 6 3724                 Clr     !r0
0569            1   3725                 
0569 82 2E      112 3726 Gen_ChkB_Lp1:   Lde     !r2,@!!rE
056B 02 02      1 6 3727                 Add     !r0,!r2
056D A0 EE      110 3728                 Incw    !!rE
056F 8A F8      1   3729                 Djnz    !r8,Gen_ChkB_Lp1
0571            1   3730                 
0571 60 E0      1 6 3731                 Com     !r0
0573            1   3732                 
0573 92 0E      112 3733                 Lde     @!!rE,!r0
0575 AF         114 3734                 Ret
0576            1   3735                 
0576            1   3736                 .LSTOFF
0576            1   3761                 .LSTON









































        WIDGET.ASSEM            Page  44
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0576            1   3762                 .Page
0576            1   3763                 .FIN
0576            1   3764 
0576            1   3765 ClearStatus:
0576 2C 14      1 6 3766                 Ld      !r2,#.HIBYTE. CStatus0
0578 3C 95      1 6 3767                 Ld      !r3,#.LOWBYTE. CStatus0
057A B0 E0      1 6 3768                 Clr     !r0
057C 1C 1C      1 6 3769                 Ld      !r1,#( End_CStatus - CStatus0 ) ;clear all status bytes
057E            1   3770                 
057E 92 02      112 3771 Clr_Stat:       Lde     @!!r2,!r0
0580 A0 E2      110 3772                 Incw    !!r2
0582 1A FA      1   3773                 Djnz    !r1,Clr_Stat
0584 8D 04 5F   1   3774                 Jp      Bank_Ret
0587            1   3775                 
0587            1   3776                 .LSTOFF
0587            1   3807                 .LSTON











































        WIDGET.ASSEM            Page  45
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0587            1   3808                 .Page
0587            1   3809                 .FIN
0587            1   3810 
0587            1   3811 Ld_LgclBlk:
0587 09 40      1 6 3812                 Ld      ScrReg0,!r0 ;pass parameter
0589 70 FD      1   3813                 Push    Rp ;save context
058B 31 40      1 6 3814                 Srp     #Wrk_Scr
058D            1   3815                 
058D 2C 14      1 6 3816                  Ld     !r2,#.HIBYTE. CStatus4
058F 3C A5      1 6 3817                  Ld     !r3,#.LOWBYTE. CStatus4
0591 02 30      1 6 3818                  Add    !r3,!r0 ;add offset to BlockNumber
0593 16 E2 00   110 3819                  Adc    !r2,#0
0596 EC 14      1 6 3820                  Ld     !rE,#.HIBYTE. LogicalBlock
0598 FC A1      1 6 3821                  Ld     !rF,#.LOWBYTE. LogicalBlock
059A            1   3822                 
059A 1C 04      1 6 3823                  Ld     !r1,#4 ;move 4 bytes
059C 82 02      112 3824 Ld_Lgcl_Lp:      Lde    !r0,@!!r2
059E 92 0E      112 3825                  Lde    @!!rE,!r0
05A0 A0 E2      110 3826                  Incw   !!r2
05A2 A0 EE      110 3827                  Incw   !!rE
05A4 1A F6      1   3828                  Djnz   !r1,Ld_Lgcl_Lp
05A6            1   3829                 
05A6 50 FD      110 3830                 Pop     Rp ;context switch
05A8 8D 04 5F   1   3831                 Jp      Bank_Ret
05AB            1   3832                 
05AB            1   3833                 .LSTOFF
05AB            1   3861                 .LSTON
































        WIDGET.ASSEM            Page  46
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


05AB            1   3862                 .Page
05AB            1   3863                 .FIN
05AB            1   3864 
05AB            1   3865                
05AB 2C 16      1 6 3866                 Ld      !r2,#.HIBYTE. CachStat
05AD 3C E8      1 6 3867                 Ld      !r3,#.LOWBYTE. CachStat
05AF 1C 14      1 6 3868                 Ld      !r1,#CacheLength
05B1            1   3869 
05B1 82 02      112 3870 S_SkN_Lp:       Lde     !r0,@!!r2 ;get array value
05B3 46 E0 80   110 3871                 Or      !r0,#CachSeek
05B6 92 02      112 3872                 Lde     @!!r2,!r0
05B8 A0 E2      110 3873                 Incw    !!r2
05BA 1A F5      1   3874                 Djnz    !r1,S_SkN_Lp
05BC            1   3875                 
05BC 8D 04 5F   1   3876                 Jp      Bank_Ret
05BF            1   3877                 
05BF            1   3878                 .LSTOFF
05BF            1   3929                 .LSTON









































        WIDGET.ASSEM            Page  47
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


05BF            1   3930                 .Page
05BF            1   3931                 .FIN
05BF            1   3932 
05BF            1   3933 Move4:
05BF 1C 04      1 6 3934                 Ld      !r1,#4
05C1 82 02      112 3935 Move4_Lp:       Lde     !r0,@!!r2
05C3 92 0E      112 3936                 Lde     @!!rE,!r0
05C5 A0 E2      110 3937                 Incw    !!r2
05C7 A0 EE      110 3938                 Incw    !!rE
05C9 1A F6      1   3939                 Djnz    !r1,Move4_Lp
05CB            1   3940                 
05CB AF         114 3941                 Ret
05CC            1   3942                 
05CC            1   3943                 .LSTOFF
05CC            1   3971                 .LSTON












































        WIDGET.ASSEM            Page  48
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


05CC            1   3972                 .Page
05CC            1   3973                 .FIN
05CC            1   3974 
05CC            1   3975 Move4C:
05CC 1C 04      1 6 3976                 Ld      !r1,#4
05CE C2 02      112 3977 Move4C_Lp:      Ldc     !r0,@!!r2
05D0 92 0E      112 3978                 Lde     @!!rE,!r0
05D2 A0 E2      110 3979                 Incw    !!r2
05D4 A0 EE      110 3980                 Incw    !!rE
05D6 1A F6      1   3981                 Djnz    !r1,Move4C_Lp
05D8            1   3982                 
05D8 AF         114 3983                 Ret
05D9            1   3984                 
05D9            1   3985                 .LSTOFF
05D9            1   4014                 .LSTON












































        WIDGET.ASSEM            Page  49
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


05D9            1   4015                 .Page
05D9            1   4016                 .FIN
05D9            1   4017 
05D9            1   4018 Init_ExtStack:
05D9 2C 17      1 6 4019                 Ld      !r2,#.HIBYTE. StackPtr
05DB 3C 4C      1 6 4020                 Ld      !r3,#.LOWBYTE. StackPtr
05DD 0C 17      1 6 4021                 Ld      !r0,#.HIBYTE. TopOfStack
05DF 92 02      112 4022                 Lde     @!!r2,!r0
05E1 A0 E2      110 4023                 Incw    !!r2
05E3 0C FF      1 6 4024                 Ld      !r0,#.LOWBYTE. TopOfStack
05E5 92 02      112 4025                 Lde     @!!r2,!r0
05E7 AF         114 4026                 Ret
05E8            1   4027                 
05E8            1   4028                 .LSTOFF
05E8            1   4055                 .LSTON












































        WIDGET.ASSEM            Page  50
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


05E8            1   4056                 .Page
05E8            1   4057                 .FIN
05E8            1   4058 
05E8            1   4059 Ext_Push:
05E8 E4 FD 44   110 4060                 Ld      ScrReg4,Rp ;save context
05EB 31 40      1 6 4061                 Srp     #Wrk_Scr
05ED            1   4062                 
05ED D6 06 21   120 4063                 Call    Load_TOS
05F0            1   4064                 
05F0 08 E4      1 6 4065                 Ld      !r0,!r4 ; save context
05F2 06 E0 0F   110 4066                 Add     !r0,#$0F ; start at register $F
05F5            1   4067                 
05F5 1C 10      1 6 4068                 Ld      !r1,#16 ;load 16 registers
05F7 E3 F0      1 6 4069 Ext_Push_Lp:    Ld      !rF,@!r0
05F9 92 F2      112 4070                 Lde     @!!r2,!rF
05FB 00 E0      1 6 4071                 Dec     !r0
05FD 80 E2      110 4072                 Decw    !!r2
05FF 1A F6      1   4073                 Djnz    !r1,Ext_Push_Lp
0601            1   4074                 
0601 D6 06 2C   120 4075                 Call    Store_TOS
0604            1   4076                 
0604 49 FD      1 6 4077                 Ld      Rp,!r4 ;restore context
0606 AF         114 4078                 Ret
0607            1   4079                 
0607            1   4080                 .LSTOFF
0607            1   4107                 .LSTON

































        WIDGET.ASSEM            Page  51
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0607            1   4108                 .Page
0607            1   4109                 .FIN
0607            1   4110 
0607            1   4111 Ext_Pop:
0607 E4 FD 44   110 4112                 Ld      ScrReg4,Rp ;save context
060A 31 40      1 6 4113                 Srp     #Wrk_Scr
060C            1   4114                 
060C D6 06 21   120 4115                 Call    Load_TOS
060F            1   4116                 
060F 08 E4      1 6 4117                 Ld      !r0,!r4 ; save context
0611            1   4118                 
0611 1C 10      1 6 4119                 Ld      !r1,#16 ;load 16 registers
0613            1   4120                 
0613 A0 E2      110 4121                 Incw    !!r2 ; StackPtr := StackPtr + 1
0615            1   4122                 
0615 83 02      118 4123 Ext_Pop_Lp:     Ldei    @!r0,@!!r2
0617 1A FC      1   4124                 Djnz    !r1,Ext_Pop_LP
0619            1   4125                 
0619 80 E2      110 4126                 Decw    !!r2 ;point at TOS
061B            1   4127                 
061B D6 06 2C   120 4128                 Call    Store_TOS
061E            1   4129                 
061E 49 FD      1 6 4130                 Ld      Rp,!r4 ;restore context
0620 AF         114 4131                 Ret
0621            1   4132                 
0621            1   4133                 .LSTOFF
0621            1   4159                 .LSTON
































        WIDGET.ASSEM            Page  52
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0621            1   4160                 .Page
0621            1   4161                 .FIN
0621            1   4162 
0621            1   4163 Load_TOS:
0621 0C 17      1 6 4164                 Ld      !r0,#.HIBYTE. StackPtr
0623 1C 4C      1 6 4165                 Ld      !r1,#.LOWBYTE. StackPtr
0625 82 20      112 4166                 Lde     !r2,@!!r0
0627 A0 E0      110 4167                 Incw    !!r0
0629 82 30      112 4168                 Lde     !r3,@!!r0
062B AF         114 4169                 Ret
062C            1   4170                 
062C            1   4171                 .LSTOFF
062C            1   4196                 .LSTON














































        WIDGET.ASSEM            Page  53
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


062C            1   4197                 .Page
062C            1   4198                 .FIN
062C            1   4199 
062C            1   4200 Store_TOS:
062C A6 E3 AF   110 4201                 Cp      !r3,#.LOWBYTE. EndOfStack ;check for stack underflow
062F BB 0D      1   4202                 Jr      Ugt,St_TOS
0631            1   4203                 
0631 31 10      1 6 4204                 Srp     #Wrk_Sys
0633 50 E4      110 4205                 Pop     !r4 ;save some history of stack frame
0635 50 E5      110 4206                 Pop     !r5
0637 50 E6      110 4207                 Pop     !r6
0639 50 E7      110 4208                 Pop     !r7
063B D6 04 80   120 4209                 Call    Abort
063E            1   4210                 
063E 0C 17      1 6 4211 St_TOS:         Ld      !r0,#.HIBYTE. StackPtr
0640 1C 4C      1 6 4212                 Ld      !r1,#.LOWBYTE. StackPtr
0642 92 20      112 4213                 Lde     @!!r0,!r2
0644 A0 E0      110 4214                 Incw    !!r0
0646 92 30      112 4215                 Lde     @!!r0,!r3
0648 AF         114 4216                 Ret
0649            1   4217                 
0649            1   4218                 .LSTOFF
0649            1   4238                 .LSTON




































        WIDGET.ASSEM            Page  54
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0649            1   4239                 .Page
0649            1   4240                 .FIN
0649            1   4241 
0649            1   4242 ZeroBlock:
0649 EC 02      1 6 4243                 Ld      !rE,#.HIBYTE.  540
064B FC 1C      1 6 4244                 Ld      !rF,#.LOWBYTE. 540
064D            1   4245                 
064D B0 E0      1 6 4246                 Clr     !r0
064F            1   4247                 
064F 92 02      112 4248 ZeroBlk_Lp:     Lde     @!!r2,!r0
0651 A0 E2      110 4249                 Incw    !!r2
0653 80 EE      110 4250                 Decw    !!rE
0655 EB F8      1   4251                 Jr      Nz,ZeroBlk_Lp
0657            1   4252                 
0657 AF         114 4253                 Ret
0658            1   4254                 
0658            1   4255                 .LSTOFF
0658            1   4274                 .LSTON









































        WIDGET.ASSEM            Page  55
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0658            1   4275                 .Page
0658            1   4276                 .FIN
0658            1   4277 
0658            1   4278 ZeroHeader:
0658 1C 21      1 6 4279                 Ld      !r1,#( WBuffer1 - WriteArray )
065A 2C 10      1 6 4280                 Ld      !r2,#.HIBYTE. WriteArray
065C 3C 00      1 6 4281                 Ld      !r3,#.LOWBYTE. WriteArray
065E B0 E0      1 6 4282                 Clr     !r0
0660            1   4283                 
0660 92 02      112 4284 ZeroHdr_Lp:     Lde     @!!r2,!r0
0662 A0 E2      110 4285                 Incw    !!r2
0664 1A FA      1   4286                 Djnz    !r1,ZeroHdr_Lp
0666            1   4287                 
0666 56 24 D7   110 4288                 And     Excpt_Stat,#$FF-Nzero_Stat-Buf_Damage
0669 AF         114 4289                 Ret
066A            1   4290                 
066A            1   4291                 .LSTOFF
066A            1   4296                 .LSTON









































        WIDGET.ASSEM            Page  56
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


066A            1   4297                 .page
066A            1   4298                 .FIN
066A            1   4299                 .org    $800
0800            1   4300                 
0800            1   4301 ;****************************************************************************
0800            1   4302 ;*  scc code - resident routines
0800            1   4303 ;****************************************************************************
0800            1   4304 
0800            1   4305 ; enable/disable scc: sets bank switch register output to enable or disable
0800            1   4306 ; scc, depending on state of r0:  $01 to enable; $00 to disable.
0800            1   4307 
0800            1   4308 
0800            1   4309 edscc:         
0800 38 E0      1 6 4310                 ld       !r3, !r0        ;set up enable/disable bit
0802 2C 1C      1 6 4311                 ld       !r2, #.hibyte. sccbank
0804 92 02      112 4312                 lde      @!!r2,!r0                   ;select scc
0806 AF         114 4313                 ret
0807            1   4314                 
0807            1   4315 ;========================================================================
0807            1   4316 ;  initscc - initializes all scc on-chip registers
0807            1   4317 ;========================================================================
0807            1   4318 
0807            1   4319 ;first the write registers:
0807            1   4320 
0807            1   4321 initscc:
0807            1   4322 ; program a hardware reset since Z8 clock out wasn't running at hardware reset
0807            1   4323 ; time - it should be running now if Z8 initialized correctly.
0807            1   4324 
0807 0C C0      1 6 4325                 ld      !r0,#hrst
0809 3C 33      1 6 4326                 ld      !r3,#sw9rst
080B 92 02      112 4327                 lde     @!!r2,!r0               ;issue hardware reset cmd in wr9
080D            1   4328 
080D            1   4329 ; now initialize remainder of write registers
080D            1   4330 
080D 0C 20      1 6 4331                 ld      !r0,#sdlc
080F 3C 29      1 6 4332                 ld      !r3,#sw4mode
0811 92 02      112 4333                 lde     @!!r2,!r0               ;set sdlc mode in wr4
0813            1   4334                 
0813 0C E0      1 6 4335                 ld      !r0,#tcntrl_init
0815 3C 35      1 6 4336                 ld      !r3,#sw10tcntrl
0817 92 02      112 4337                 lde     @!!r2,!r0               ;set flag idle, crc preset to 1s
0819            1   4338                 
0819 0C 7E      1 6 4339                 ld      !r0,#flag
081B 3C 2F      1 6 4340                 ld      !r3,#sw7flg
081D 92 02      112 4341                 lde     @!!r2,!r0               ;set flag byte: 01111110
081F            1   4342                 
081F 0C E1      1 6 4343                 ld      !r0,#xmtinit
0821 3C 2B      1 6 4344                 ld      !r3,#sw5xmt
0823 92 02      112 4345                 lde     @!!r2,!r0               ;initialize transmitter
0825            1   4346                 
0825 0C 01      1 6 4347                 ld      !r0,#myadr
0827 3C 2D      1 6 4348                 ld      !r3,#sw6adr
0829 92 02      112 4349                 lde     @!!r2,!r0               ;set my address ($01)
082B            1   4350                 





        WIDGET.ASSEM            Page  57
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


082B 0C DC      1 6 4351                 ld      !r0,#rcvinit
082D 3C 27      1 6 4352                 ld      !r3,#sw3rcv
082F 92 02      112 4353                 lde     @!!r2,!r0               ;init receiver
0831            1   4354                 
0831 0C E0      1 6 4355                 ld      !r0,#intinit
0833 3C 23      1 6 4356                 ld      !r3,#sw1int
0835 92 02      112 4357                 lde     @!!r2,!r0               ;disable interrupts
0837            1   4358                 
0837 0C 75      1 6 4359                 ld      !r0,#clkvalt
0839 3C 37      1 6 4360                 ld      !r3,#sw11clk
083B 92 02      112 4361                 lde     @!!r2,!r0               ;set up xmt,rcv clock sources
083D            1   4362                 ;TRxC out = xmt clock (BR generator)
083D            1   4363                 
083D 0C 06      1 6 4364                 ld      !r0,#brgenlo
083F 3C 39      1 6 4365                 ld      !r3,#sw12brl
0841 92 02      112 4366                 lde     @!!r2,!r0               ;br generator lo byte
0843            1   4367                 
0843 0C 00      1 6 4368                 ld      !r0,#brgenhi
0845 3C 3B      1 6 4369                 ld      !r3,#sw13brh
0847 92 02      112 4370                 lde     @!!r2,!r0               ;br generator hi ;byte
0849            1   4371                 
0849 0C 00      1 6 4372                 ld      !r0,#xintdis
084B 3C 3F      1 6 4373                 ld      !r3,#sw15xint
084D 92 02      112 4374                 lde     @!!r2,!r0               ;disable transmit interrupts
084F            1   4375 
084F            1   4376 ;set up clock sources for BR generator and digital phase locked loop (dpll)
084F            1   4377 
084F 3C 3D      1 6 4378                 ld      !r3,#sw14cgen           ;set up address for next series
0851            1   4379                 ;of commands
0851 0C 60      1 6 4380                 ld      !r0,#displl
0853 92 02      112 4381                 lde     @!!r2,!r0               ;disable pll, enable br gener.
0855            1   4382                 
0855 0C A0      1 6 4383                 ld      !r0,#pllclk
0857 92 02      112 4384                 lde     @!!r2,!r0               ;set RTxC = dpll clk
0859            1   4385                 
0859 0C C0      1 6 4386                 ld      !r0,#setfm
085B 92 02      112 4387                 lde     @!!r2,!r0            ;set fm mode for dpll
085D            1   4388                 
085D 0C 21      1 6 4389                 ld      !r0,#enpll + enbrg
085F 92 02      112 4390                 lde     @!!r2,!r0               ;enable pll and brgen - sets 
0861            1   4391                                                 ;sync/hunt bit also
0861 AF         114 4392                 ret
0862            1   4393                 
















        WIDGET.ASSEM            Page  58
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0862            1   4394                 .page
0862            1   4395 
0862            1   4396 ;===========================================================================
0862            1   4397 ;  T1poll_ab routine - Enable Applebus Timer (T1) for polled operation
0862            1   4398 ;
0862            1   4399 ;  Stops, then starts T1 in continuous mode at 200us, if rpack called, or
0862            1   4400 ;  400us, if tpack called.  This is polled operations; no interrupts are
0862            1   4401 ;  used.
0862            1   4402 ;   
0862            1   4403 ;  The T1 Irq is cleared prior to starting timer since an Irq may have 
0862            1   4404 ;  previously been set.
0862            1   4405 ;
0862            1   4406 ;  INPUTS:  r0: 0 if rpack is caller; 1 if tpack is caller.
0862            1   4407 ;
0862            1   4408 ;  OUTPUTS: Clears T1 Irq and starts T1, set for either 200us or 400us.
0862            1   4409 ;
0862            1   4410 ;  REGISTERS:  r0 - see above.
0862            1   4411 ;
0862            1   4412 ;===========================================================================
0862            1   4413                 
0862            1   4414 T1poll_ab:
0862 E6 F1 C0   110 4415                 ld      Tmr, #Int_Out   ;stop jT1, keep ext clock output going.
0865 E6 F3 0B   110 4416                 ld      Pre1, #$B       ;prescaler = divide by 2, continuous cnt
0868 E6 F2 5D   110 4417                 ld      T1, #w_200      ;set up for 200us
086B 42 00      1 6 4418                 or      !r0, !r0        ;check rpack or tpack calling
086D 6B 03      1   4419                 jr      z, start_timer
086F E6 F2 BA   110 4420                 ld      T1, #w_400      ;change to 400us for tpack
0872            1   4421 start_timer:
0872 56 FA DF   110 4422                 and     Irq, #$FF-Timer1        ;clear old Irq if set
0875 46 F1 0C   110 4423                 or      Tmr, #T1_CntEn + T1_Load ;start T1
0878 AF         114 4424                 ret
0879            1   4425                 
0879            1   4426 ;===========================================================================
0879            1   4427 ;  T1_restore routine
0879            1   4428 ;
0879            1   4429 ;  Stops, then starts T1 at continuous 10 ms intervals, used for rpack 
0879            1   4430 ;  and widget dead man timers via T1 interrupt routine - abwigint  
0879            1   4431 ;  Clears any previous Irq
0879            1   4432 ;
0879            1   4433 ;===========================================================================
0879            1   4434 
0879            1   4435 T1_restore:
0879 E6 F1 C0   110 4436                 ld      Tmr, #Int_Out   ;stop T1, keep ext clock going
087C E6 F3 03   110 4437                 ld      Pre1, #$3
087F E6 F2 8F   110 4438                 ld      T1, #143        ;set up for 10ms continuous opn.
0882 56 FA DF   110 4439                 and     Irq, #$FF-Timer1        ;clr old Irq
0885 46 F1 0E   110 4440                 or      Tmr, #T1_CntEn + T1_Load + T0_CntEn  ;start the timer
0888 AF         114 4441                 ret
0889            1   4442                 










        WIDGET.ASSEM            Page  59
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0889            1   4443                 .page
0889            1   4444                 
0889            1   4445 ;=======================================================================
0889            1   4446 ;  abwigint routine -  interrupt routine for applebus and widget interrupts
0889            1   4447 ;
0889            1   4448 ;  Checks for scc interrupt enable bit to execute widget interrupt routine
0889            1   4449 ;  or scc interrupt routine.  Both decrement the dead man timer counter, clr Irq
0889            1   4450 ;  and return to interrupted routine if non-zero.  If zero, widget pops 
0889            1   4451 ;  flags and return address and aborts.  Applebus does likewise but returns
0889            1   4452 ;  to calling routine with scc_timout bit set and sccinten bit clr.  Irq
0889            1   4453 ;  for T1 is also cleared.
0889            1   4454 ;
0889            1   4455 ;  INPUTS:  sccinten bit in bus_stat1
0889            1   4456 ;           Dmt_Counter set up to proper timeout value in multiples of 10ms
0889            1   4457 ;
0889            1   4458 ;  OUTPUTS:  scc_timout bit set if Dmt_Counter goes to zero for scc mode;
0889            1   4459 ;            call Abort for widget.  Irq cleared.
0889            1   4460 ;============================================================================
0889            1   4461 
0889            1   4462 abwigint:
0889 76 42 04   110 4463                 tm      bus_stat1, #sccinten    ;scc interrupt?
088C 6B 13      1   4464                 jr      z, wigint               ;no if taken
088E 80 36      110 4465                 decw    Dmt_Counter
0890 EB 13      1   4466                 jr      nz, int_ret             ;ret if not timeout
0892            1   4467                 
0892 46 44 10   110 4468                 or      bus_stat3, #scc_timout  ;set error status
0895 56 42 FB   110 4469                 and     bus_stat1, #$FF-sccinten ;clr scc int enable
0898 50 E0      110 4470                 pop     !r0                     ;pop flags
089A 50 E2      110 4471                 pop     !r2
089C 50 E3      110 4472                 pop     !r3                     ;and return address
089E 31 30      1 6 4473                 srp     #wrk_absys              ;restore caller's environment
08A0 AF         114 4474                 ret
08A1            1   4475 wigint:
08A1 80 36      110 4476                 Decw    Dmt_Counter
08A3 6B 05      1   4477                 jr      z, JpVector4            ;abort if zero
08A5            1   4478 int_ret:
08A5 56 FA DF   110 4479                 and     Irq, #$FF - Timer1      ;clr this interrupt
08A8 9F         1 6 4480                 ei
08A9 BF         116 4481                 iret
08AA            1   4482 JpVector4:
08AA 8D 04 75   1   4483                 jp      Vector4
08AD            1   4484 
08AD            1   4485 ;============================================================================
08AD            1   4486 ;  rcv_clr routine
08AD            1   4487 ;
08AD            1   4488 ;  receiver clear routine.  Designed to work with tpack and rpack to initialize
08AD            1   4489 ;  the receiver.  scc pointers are assumed set up as indicated below.  
08AD            1   4490 ;  Disables the receiver, then flushes the receive FIFO, then resets the status
08AD            1   4491 ;  bits in status reg. 1.  Used by tpack to set up receiver ahead of time 
08AD            1   4492 ;  to save time in rpack when tpack and rpack are called in sequence.
08AD            1   4493 ;
08AD            1   4494 ;  INPUTS:  r6   = pointer to hibyte of scc bank - r7 not preset        
08AD            1   4495 ;           r8r9 = pointer to scc receive buffer - scc_rbuf
08AD            1   4496 ;





        WIDGET.ASSEM            Page  60
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


08AD            1   4497 ;  OUTPUTS:  receiver disabled, FIFO flushed, and status reg 1 cleared.
08AD            1   4498 ;
08AD            1   4499 ;  REGISTERS:
08AD            1   4500 ;
08AD            1   4501 ;  r0  : temp. storage - constants for loading into scc registers
08AD            1   4502 ;  r6r7: pointer to sw3rcv and sw0cmd (scc cmd register)
08AD            1   4503 ;  r8r9: pointer to scc_rbuf, the top of FIFO buffer
08AD            1   4504 ;
08AD            1   4505 ;==========================================================================
08AD            1   4506 
08AD            1   4507 rcv_clr:
08AD 7C 27      1 6 4508                 ld      !r7, #sw3rcv    ;ptr to rcvr mode register
08AF 0C DC      1 6 4509                 ld      !r0, #rcvinit
08B1 92 06      112 4510                 lde     @!!r6, !r0      ;disable receiver
08B3 82 08      112 4511                 lde     !r0,@!!scc_rbuf  ;flush the receive FIFO
08B5 82 08      112 4512                 lde     !r0,@!!scc_rbuf
08B7 82 08      112 4513                 lde     !r0,@!!scc_rbuf
08B9            1   4514 
08B9 7C 21      1 6 4515                 ld      !r7, #sw0cmd
08BB 0C 30      1 6 4516                 ld      !r0, #erres
08BD 92 06      112 4517                 lde     @!!r6, !r0      ;clear receive status bits in sts reg 1
08BF AF         114 4518                 ret
08C0            1   4519 




































        WIDGET.ASSEM            Page  61
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


08C0            1   4520                 .page
08C0            1   4521 
08C0            1   4522 ;=============================================================================
08C0            1   4523 ; tpack routine
08C0            1   4524 ;
08C0            1   4525 ; Transmit packet.  If l_busy = 0, enables rcvr and waits for bus idle (sensed
08C0            1   4526 ; by the sync/hunt scc status bit), then waits for backoff count passed by
08C0            1   4527 ; higher level in increments of 400us.  After backoff, checks missing clock
08C0            1   4528 ; bit for a final check on bus idle; if clear, then can xmit packet.
08C0            1   4529 ; Times out if bus does not go idle within 2 sec.  If bus goes non-idle during
08C0            1   4530 ; backoff wait, routine returns with bus_busy flag set.
08C0            1   4531 ;
08C0            1   4532 ; After backoff time, or if l_busy = 1, the receiver is disabled, flushed,
08C0            1   4533 ; and reset (rcv_clr), and then the packet is transmitted, preceeded by a
08C0            1   4534 ; "pulse" on the line created by turning RTS on and off for > 1 bit time.
08C0            1   4535 ; Since the transmitter is idling (transmitting "1's"), this will cause at 
08C0            1   4536 ; least one transition on the line which will set the missing clock bits of
08C0            1   4537 ; all other devices not transmitting on the bus.  The missing clock status
08C0            1   4538 ; is then used as a final "collision detect" at other bus nodes as described
08C0            1   4539 ; above.  The packet is now ready to be transmitted.  If in diagnostic mode,
08C0            1   4540 ; the RTS and DTR signals are 0 which forces a loopback of transmit data to
08C0            1   4541 ; receive data (outside the scc chip) and disables the driver connected to the 
08C0            1   4542 ; Applebus cable.  The lap header is taken from the lap storage area in the 
08C0            1   4543 ; Z8's registers (their_node, our_node, lap_ctrl); remainder of data taken from
08C0            1   4544 ; xmt buffer in RAM.  The byte count is passed to routine.  If zero, only
08C0            1   4545 ; the lap header is transmitted.
08C0            1   4546 ;
08C0            1   4547 ; INPUTS: 1) backoff count in rCrD (boffhi,lo)
08C0            1   4548 ;         2) xmt buffer pointer in rErF
08C0            1   4549 ;         3) bytecount value in bytecnthi,lo (does not include lap bytes)
08C0            1   4550 ;         4) l_busy, sccdiag bits in bus_stat1
08C0            1   4551 ;
08C0            1   4552 ; OUTPUTS: 1) bus_stat1: msg_sent bit if transmit completes.
08C0            1   4553 ;          2) bus_stat3: no_busidle bit set if time out waiting for idle bus
08C0            1   4554 ;          3) bus_stat4: bus_busy bit set if bus went busy during backoff
08C0            1   4555 ;          Note:  There is no timeout mechanism once transmit data loop starts
08C0            1   4556 ;
08C0            1   4557 ; REGISTERS:
08C0            1   4558 ;
08C0            1   4559 ; r0  : temp storage
08C0            1   4560 ; r1  : not used (reserved for rpack usage)
08C0            1   4561 ; r2r3: ptr to scc status reg 0 (scc_sts0)
08C0            1   4562 ; r4r5: counter for bus idle timeout, and ...
08C0            1   4563 ; r4  : transmit buffer empty mask (tbuf_emp)
08C0            1   4564 ; r5  : reset transmit underrun latch (rturl) constant, and temp storage
08C0            1   4565 ; r6r7: ptr to scc xmt reg (sw5xmt), sccrcv reg (sw3rcv), and cmd reg's
08C0            1   4566 ;       (sw0cmd and sw14cgen), and missing clock status reg (sr10mclk)
08C0            1   4567 ; r8r9: ptr to scc on-chip data buffer (scc_wbuf or scc_rbuf)
08C0            1   4568 ; rA  : used for bytecnt hi value passed by calling routine
08C0            1   4569 ; rB  :     "            lo             "
08C0            1   4570 ; rCrD: backoff count (boffhi,lo) during backoff part of tpack, and ...
08C0            1   4571 ; rC  : temp. storage
08C0            1   4572 ; rD  : ptr to lap header in Z8 registers
08C0            1   4573 ; rErF: ptr to transmit buffer in RAM (xmtbuf)





        WIDGET.ASSEM            Page  62
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


08C0            1   4574 ;
08C0            1   4575 ;============================================================================
08C0            1   4576 
























































        WIDGET.ASSEM            Page  63
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


08C0            1   4577                 .page
08C0            1   4578 
08C0            1   4579 tpack:
08C0            1   4580 ;load working registers - local variables
08C0 31 10      1 6 4581                 srp     #wrk_abtr               ;set wrkg set for tpack
08C2 2C 1C      1 6 4582                 ld      !scc_sts0hi, #.hibyte. sccbank
08C4 3C 21      1 6 4583                 ld      !scc_sts0lo, #sr0sts     ;ptr to status reg 0
08C6 6C 1C      1 6 4584                 ld      !r6, #.hibyte. sccbank
08C8 7C 27      1 6 4585                 ld      !r7, #sw3rcv            ;ptr to rcvr reg for rcv init
08CA 8C 1C      1 6 4586                 ld      !scc_wbufhi, #.hibyte. sccbank
08CC 9C 31      1 6 4587                 ld      !scc_wbuflo, #sw8buf     ;ptr to scc write buffer
08CE            1   4588 ; check for link busy state
08CE 76 42 40   110 4589                 tm      bus_stat1, #l_busy      ;transmit immediately?
08D1 EB 52      1   4590                 jr      nz, xmt_start           ;yes if taken
08D3            1   4591 
08D3            1   4592 ; set up bus idle timer after enable receiver to sense bus idle condition
08D3 0C DD      1 6 4593                 ld      !r0 , #rcven
08D5 92 06      112 4594                 lde     @!!r6, !r0              ;enable receiver
08D7 4C 13      1 6 4595                 ld      !r4, #.hibyte. busidl_to
08D9 5C 88      1 6 4596                 ld      !r5, #.lowbyte. busidl_to
08DB 0C 01      1 6 4597                 ld      !r0, #1                 ;set up for tpack caller
08DD D6 08 62   120 4598                 call    T1poll_ab               ;start timer
08E0            1   4599 chk_busidl:
08E0 82 02      112 4600                 lde     !r0,@!!scc_sts0
08E2 76 E0 10   110 4601                 tm      !r0, #sync_hunt         ;idle bus?
08E5 EB 12      1   4602                 jr      nz, boff_start          ;yes if jump
08E7 76 FA 20   110 4603                 tm      Irq, #Timer1            ;400us up?
08EA 6B F4      1   4604                 jr      z, chk_busidl           ;no if jump
08EC 56 FA DF   110 4605                 and     Irq, #$FF - Timer1      ;clear T1 Irq
08EF 80 E4      110 4606                 decw    !!r4                    ;bump fixed timeout value
08F1 EB ED      1   4607                 jr      nz, chk_busidl
08F3 46 44 40   110 4608                 or      bus_stat3, #no_busidl   ;timed out
08F6            1   4609 tpack_ret:
08F6 31 30      1 6 4610                 srp     #wrk_absys              ;restore regset for caller
08F8 AF         114 4611                 ret
08F9            1   4612 boff_start:
08F9 0C 01      1 6 4613                 ld      !r0, #1
08FB D6 08 62   120 4614                 call    T1poll_ab               ;start 400us timer again
08FE            1   4615                 
08FE 7C 3D      1 6 4616                 ld      !r7, #sw14cgen
0900 0C 41      1 6 4617                 ld      !r0, #rstmck
0902 92 06      112 4618                 lde     @!!r6, !r0              ;reset missing clock latches
0904            1   4619 boff_loop:
0904 82 02      112 4620                 lde     !r0,@!!scc_sts0          ;check for idle bus
0906 76 E0 10   110 4621                 tm      !r0, #sync_hunt
0909 EB 05      1   4622                 jr      nz, bus_stillidle
090B            1   4623 bus_notidle:
090B 46 45 80   110 4624                 or      bus_stat4, #bus_busy    ;bus went busy during boff
090E 8B E6      1   4625                 jr      tpack_ret
0910            1   4626 bus_stillidle:
0910 76 FA 20   110 4627                 tm      Irq, #Timer1
0913 6B EF      1   4628                 jr      z, boff_loop
0915 56 FA DF   110 4629                 and     Irq, #$FF - Timer1      ;clr the Irq
0918 80 1C      110 4630                 decw    boff                    ;bump boff counter (rCrD)





        WIDGET.ASSEM            Page  64
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


091A EB E8      1   4631                 jr      nz, boff_loop
091C            1   4632 ; check missing clock before transmitting:
091C 7C 35      1 6 4633                 ld      !r7, #sr10mclk
091E 82 06      112 4634                 lde     !r0, @!!r6              ;get missing clk status
0920 76 E0 80   110 4635                 tm      !r0, #onecm
0923 EB E6      1   4636                 jr      nz, bus_notidle         ;return if bus went busy
0925            1   4637 xmt_start:
0925            1   4638 ;ready to transmit the packet!
0925 76 42 02   110 4639                 tm      bus_stat1, #scc_diag    ;skip rcvr init/disable if diag
0928 EB 03      1   4640                 jr      nz, xmt_rdy
092A D6 08 AD   120 4641                 call    rcv_clr         ;disable and init rcvr for subseq rpack
092D            1   4642 xmt_rdy:
092D DC 3D      1 6 4643                 ld      !rD, #lap_ptr   ;set up ptr to lap header bytes
092F 4C 04      1 6 4644                 ld      !r4, #tbuf_emp
0931 5C C0      1 6 4645                 ld      !r5, #rturl     ;set up masks
0933            1   4646 ;ready to start xmitting - sequence thru sending pulse, then enable xmtr   
0933 CC E2      1 6 4647                 ld      !rC, #xmt_setup ;turn on RTS, xmtr disabled
0935 76 42 02   110 4648                 tm      bus_stat1, #sccdiag
0938 6B 03      1   4649                 jr      z, en_drivr     ;skip diag setup if normal mode   
093A 56 EC 7D   110 4650                 and     !rC, #$FF - RTS - DTR  ;setup for diag xmt
093D            1   4651 en_drivr:
093D 7C 2B      1 6 4652                 ld      !r7, #sw5xmt
093F 08 EC      1 6 4653                 ld      !r0, !rC
0941 92 06      112 4654                 lde     @!!r6, !r0      ;driver is now on (unless diag)
0943 FF         1 6 4655                 nop
0944 0C E1      1 6 4656                 ld      !r0, #xmtinit   ;wait 1.5 bit times
0946 92 06      112 4657                 lde     @!!r6, !r0      ;turn off driver (pulse was sent)
0948 08 EC      1 6 4658                 ld      !r0, !rC        ;now get xmt setup value again
094A 46 E0 09   110 4659                 or      !r0, #xmten     ;while waiting 1.6 bit times 
094D 92 06      112 4660                 lde     @!!r6, !r0      ;before enabling driver and xmtr for pkt
094F 0C 01      1 6 4661                 ld      !r0, #lead_flgs ;set up constant for leading flg xmt
0951            1   4662 wlflgs:
0951 0A FE      1   4663                 djnz    !r0, wlflgs              ;wait for flags to xmt
0953 7C 21      1 6 4664                 ld      !r7, #sw0cmd            ;r6r7 ptr to cmd reg
0955 0C 81      1 6 4665                 ld      !r0, #rtcrc
0957 92 06      112 4666                 lde     @!!r6, !r0              ;reset xmt crc gen.
0959            1   4667 ;start transmitting bytes here
0959 E3 0D      1 6 4668                 ld      !r0, @!rD               ;get 1st byte from lap area
095B 92 08      112 4669                 lde    @!!scc_wbuf, !r0          ;write to scc
095D 92 56      112 4670                 lde     @!!r6, !r5              ;reset xmt undrn ltch so crc can
095F            1   4671                                                 ;transmit
095F            1   4672 ;check for single byte xmit - diag mode is only case
095F 76 42 02   110 4673                 tm      bus_stat1, #scc_diag
0962 EB 24      1   4674                 jr      nz, w_crcstart          ;go to crc xmit loop
0964            1   4675 ; start write loop for remaining two lap header bytes
0964 5C 02      1 6 4676                 ld      !r5, #2                 ;setup cntr for remaing lap byts
0966            1   4677 wait_lbufemp:
0966 82 C2      112 4678                 lde     !rC,@!!scc_sts0          ;get write status
0968 72 C4      1 6 4679                 tm      !rC, !r4                ;r4 has bufemp mask
096A 6B FA      1   4680                 jr      z, wait_lbufemp
096C            1   4681 ;write next chars from lap area - source and control bytes
096C DE         1 6 4682                 inc     !rD                     ;bump lap data ptr
096D E3 0D      1 6 4683                 ld      !r0, @!rD               ;get next byte
096F 92 08      112 4684                 lde    @!!scc_wbuf, !r0          ;to scc





        WIDGET.ASSEM            Page  65
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0971 5A F3      1   4685                 djnz    !r5, wait_lbufemp
0973            1   4686 ;now write the rest of the data
0973 76 42 01   110 4687                 tm      bus_stat1, #lap_only    ;only xmt lap?
0976 EB 10      1   4688                 jr      nz, w_crcstart           ;yes if jump
0978            1   4689 wait_dbufemp:
0978 82 C2      112 4690                 lde     !rC,@!!scc_sts0
097A 72 C4      1 6 4691                 tm      !rC, !r4
097C 6B FA      1   4692                 jr      z, wait_dbufemp
097E            1   4693 ;write data chars
097E 82 0E      112 4694                 lde     !r0,@!!xmtbuf            ;get char from RAM
0980 92 08      112 4695                 lde    @!!scc_wbuf, !r0          ;write to scc
0982 A0 1E      110 4696                 incw    xmtbuf
0984 80 1A      110 4697                 decw    bytecnt
0986 EB F0      1   4698                 jr      nz, wait_dbufemp
0988            1   4699 ;done with data - now wait for crc to start, then end
0988            1   4700 w_crcstart:
0988 82 C2      112 4701                 lde     !rC,@!!scc_sts0
098A 76 EC 40   110 4702                 tm      !rC, #tur_eom           ;check for xmt undrn/eom -
098D            1   4703                                                 ;indicates crc has started out
098D 6B F9      1   4704                 jr      z, w_crcstart
098F            1   4705 w_crcend:
098F 82 C2      112 4706                 lde     !rC,@!!scc_sts0
0991 72 C4      1 6 4707                 tm      !rC, !r4                ;wait for xmt buf empty -
0993 6B FA      1   4708                 jr      z, w_crcend             ;indicates end of crc
0995            1   4709 
0995            1   4710 ;set up to disable xmtr while ending flag transmits
0995 7C 2B      1 6 4711                 ld      !r7, #sw5xmt            ;set r6r7 for scc xmt reg
0997 0C E3      1 6 4712                 ld      !r0, #xmtr_off          ;turn off xmtr, leave RTS on
0999 76 42 02   110 4713                 tm      bus_stat1, #sccdiag
099C 6B 03      1   4714                 jr      z, dis_xmtr
099E 56 E0 7D   110 4715                 and     !r0, #$FF - DTR - RTS  ;clear DTR,RTS if diag mode
09A1            1   4716 dis_xmtr:
09A1 92 06      112 4717                 lde     @!!r6, !r0
09A3 0C 20      1 6 4718                 ld      !r0, #twobyt            ;FM0 "1's" now xmitting
09A5            1   4719 w_twobyt:
09A5 0A FE      1   4720                 djnz    !r0, w_twobyt           ;xmt two bytes of FM0 "1's"
09A7            1   4721 ; now shut off RTS, set DTR to disable xmt data for normal and diag modes, resp.
09A7 0C E1      1 6 4722                 ld      !r0, #xmtinit           ;initialization val. for xmt reg
09A9 92 06      112 4723                 lde     @!!r6, !r0
09AB            1   4724 ; enable receiver for subsequent packet 
09AB 7C 27      1 6 4725                 ld      !r7, #sw3rcv
09AD 0C DD      1 6 4726                 ld      !r0, #rcven
09AF 92 06      112 4727                 lde     @!!r6, !r0              ;receiver now enabled
09B1 46 42 08   110 4728                 or      bus_stat1, #msg_sent    ;set status
09B4 8D 08 F6   1   4729                 jp      tpack_ret
09B7            1   4730 













        WIDGET.ASSEM            Page  66
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


09B7            1   4731                 .page
09B7            1   4732 
09B7            1   4733 ;===========================================================================
09B7            1   4734 ; rpack routine
09B7            1   4735 ;
09B7            1   4736 ; Receive packet.  Waits for a packet addressed to Widget's node number,
09B7            1   4737 ; determined and set by another level.  The amount of time routine waits is set
09B7            1   4738 ; by a higher level as a two-byte count value, where each count represents
09B7            1   4739 ; 200us.  If a properly addressed packet is received prior to the timeout,
09B7            1   4740 ; the first three bytes of the packet (the header) are checked as follows:
09B7            1   4741 ; If the first byte indicates a broadcast, the packet is saved if d_busy=0
09B7            1   4742 ; (idle state) and dumped if d_busy=1 (not idle).  The 'broadcast' status bit
09B7            1   4743 ; is set.  If not a broadcast, and state is not idle, the next byte (source
09B7            1   4744 ; node number) is checked for the correct value.  This check is skipped if
09B7            1   4745 ; state is idle.  Next the third (control) byte is checked against two possible
09B7            1   4746 ; values.  If all checks are correct, the remainder of the packet is saved in
09B7            1   4747 ; RAM at the location passed to the routine; otherwise the packet is dumped
09B7            1   4748 ; (read but not saved).  In any case the header bytes tested and correctly
09B7            1   4749 ; compared are saved in the lap header area of the Z8 registers.  Status
09B7            1   4750 ; bits are set to indicate whether packet was saved or dumped.
09B7            1   4751 ;
09B7            1   4752 ; The packet is checked for crc and overrun errors and there is a 5 sec.
09B7            1   4753 ; timeout if the routine gets hung after the 1st character is detected.
09B7            1   4754 ; Appropriate status bits are set.  The total byte count may be computed
09B7            1   4755 ; from the ending address in rErF (receive buffer ptr), but is not computed
09B7            1   4756 ; by rpack.
09B7            1   4757 ;
09B7            1   4758 ; INPUTS: 
09B7            1   4759 ; 1. Widget node number stored in scc chip register
09B7            1   4760 ; 2. timeout value for packet reception in rCrD: # of 200us time increments
09B7            1   4761 ; 3. d_busy bit in bus_stat1 (idle/not idle state)
09B7            1   4762 ; 4. expected source byte in r1
09B7            1   4763 ; 5. expected control byte in rA. 
09B7            1   4764 ; 6. pointer to receive buffer in rErF
09B7            1   4765 ;
09B7            1   4766 ; OUTPUTS:
09B7            1   4767 ; 1. Bus_stat1: msg_rcvd bit set if all header bytes are as expected and 
09B7            1   4768 ;               end of packet is detected.
09B7            1   4769 ; 2. bus_stat3: scc_timout if routine hangs
09B7            1   4770 ;               rorerr if receiver overrun is detected
09B7            1   4771 ; 3. bus_stat4: rcv_timout set if timeout occurs before 1st byte of pkt is rcvd
09B7            1   4772 ;               typ_mismatch set if a byte of the header does not match 
09B7            1   4773 ;               expected value. (Also set on rejected broadcasts)
09B7            1   4774 ;               scc_ crcerr set if one occurs
09B7            1   4775 ;
09B7            1   4776 ; REGISTERS:
09B7            1   4777 ; r0  : temp storage
09B7            1   4778 ; r1  : expected value for source byte
09B7            1   4779 ; r2r3: ptr to scc status register 0, scc_sts0hi,lo
09B7            1   4780 ; r4  : mask for char avail in status reg 0
09B7            1   4781 ; r5  : mask for eof or rcvr overrun, and temp storage
09B7            1   4782 ; r6r7: ptr to scc cmd reg (sw0cmd), rcv control (sw3rcv), and status reg 1
09B7            1   4783 ;       (scc_sts1hi,lo)
09B7            1   4784 ; r8r9: ptr to scc on-chip receive buffer, scc_rbuf, (top of rcv FIFO)





        WIDGET.ASSEM            Page  67
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


09B7            1   4785 ; rA  : expected value for control byte
09B7            1   4786 ; rCrD: timeout value for packet detection, and temp. storage
09B7            1   4787 ; rErF: ptr to receive buffer in RAM
09B7            1   4788 ;
09B7            1   4789 ;=========================================================================
09B7            1   4790 





















































        WIDGET.ASSEM            Page  68
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


09B7            1   4791                 .page
09B7            1   4792 
09B7            1   4793 rpack:
09B7            1   4794 ; load registers
09B7 31 10      1 6 4795                 srp     #wrk_abtr       ;set working set for rpack
09B9 76 42 40   110 4796                 tm      bus_stat1, #l_busy      ;check for link-level busy
09BC EB 1A      1   4797                 jr      nz, rp_fast     ;skip load of reg's already setup
09BE            1   4798 ; by tpack, plus receiver initialization to get fast response when l_busy=1
09BE 2C 1C      1 6 4799                 ld      !scc_sts0hi, #.hibyte. sccbank
09C0 3C 21      1 6 4800                 ld      !scc_sts0lo, #sr0sts     ;scc status reg 0 ptr
09C2 6C 1C      1 6 4801                 ld      !r6, #.hibyte. sccbank  ;scc pointer, hi byte
09C4 7C 27      1 6 4802                 ld      !r7, #sw3rcv            ;rcv mode reg
09C6 8C 1C      1 6 4803                 ld      !scc_rbufhi, #.hibyte. sccbank
09C8 9C 31      1 6 4804                 ld      !scc_rbuflo, #sr8buf     ;scc rcv buffer
09CA            1   4805 ; Flush FIFO, disable rcvr, and reset error flags if not diagnostic mode
09CA 76 42 02   110 4806                 tm      bus_stat1, #sccdiag
09CD EB 09      1   4807                 jr      nz, rp_fast     ;skip rcvr init if diag.
09CF D6 08 AD   120 4808                 call    rcv_clr         ;init rcvr (disabled)
09D2            1   4809 ; now enable receiver for incoming packets
09D2 7C 27      1 6 4810                 ld      !r7, #sw3rcv
09D4 0C DD      1 6 4811                 ld      !r0, #rcven
09D6 92 06      112 4812                 lde     @!!r6, !r0      ;enabled            
09D8            1   4813 ; enter here if l_busy = 1: rcvr was enabled by tpack
09D8            1   4814 rp_fast:
09D8 5C A0      1 6 4815                 ld      !r5, #eof + ror ;set up masks
09DA 4C 01      1 6 4816                 ld      !r4, #rchar
09DC E6 36 01   110 4817                 ld      Dmt_Counter, #.hibyte. Dmt_Val
09DF E6 37 F4   110 4818                 ld      Dmt_Counter+1, #.lowbyte. Dmt_Val  ;set up 5 sec. dmt
09E2 B0 E0      1 6 4819                 clr     !r0                                ;for later
09E4 D6 08 62   120 4820                 call    T1poll_ab       ;start 200 us timer; r0=0 --> rpack call
09E7 7C 23      1 6 4821                 ld      !r7, #sr1sts    ;r7 now points to status reg 1
09E9            1   4822 wait_1stchar:
09E9 82 02      112 4823                 lde     !r0,@!!scc_sts0
09EB 72 04      1 6 4824                 tm      !r0, !r4
09ED EB 14      1   4825                 jr      nz, got_1st
09EF 76 FA 20   110 4826                 tm      Irq, #Timer1
09F2 6B F5      1   4827                 jr      z, wait_1stchar
09F4 56 FA DF   110 4828                 and     Irq, #$FF - Timer1      ;clear old Irq
09F7 80 EC      110 4829                 decw    !!rC                    ;bump rcv timeout counter
09F9 EB EE      1   4830                 jr      nz, wait_1stchar
09FB 46 45 40   110 4831                 or      bus_stat4, #rcv_timout  ;set status
09FE D6 08 79   120 4832                 call    T1_restore              ;set T1 for 10ms
0A01 8B 5E      1   4833                 jr      rcv_exit
0A03            1   4834 got_1st:
0A03 82 08      112 4835                 lde     !r0, @!!scc_rbuf        ;read 1st char
0A05 D6 08 79   120 4836                 call    T1_restore              ;start dead bus timeout
0A08 46 42 04   110 4837                 or      bus_stat1, #sccinten    ;sset inten bit
0A0B 9F         1 6 4838                 ei
0A0C B0 ED      1 6 4839                 clr     !rD             ;clear reg that will hold scc_sts1 since
0A0E            1   4840 ;scc_sts1 is not saved during read of lap header.
0A0E 09 3E      1 6 4841                 ld      our_node, !r0           ;save in lap area
0A10 A6 E0 FF   110 4842                 cp      !r0, #$FF               ;broadcast?
0A13 EB 08      1   4843                 jr      nz, get_src             ;no if taken
0A15 46 42 10   110 4844                 or      bus_stat1, #broadcast   ;set bit





        WIDGET.ASSEM            Page  69
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0A18 76 42 80   110 4845                 tm      bus_stat1, #d_busy
0A1B EB 57      1   4846                 jr      nz, dump_pkt            ;dump pkt if not idle.broadcast
0A1D            1   4847 get_src:
0A1D 82 08      112 4848                 lde     !r0,@!!scc_rbuf          ;source byte
0A1F 09 3D      1 6 4849                 ld      their_node, !r0         ;save source byte
0A21 76 42 80   110 4850                 tm      bus_stat1, #d_busy      ;are we in the middle of somthng
0A24 6B 04      1   4851                 jr      z, get_control          ;no if taken
0A26            1   4852 ;check source byte
0A26 A2 01      1 6 4853                 cp      !r0, !r1
0A28 EB 4A      1   4854                 jr      nz, dump_pkt            ;dump if source not right
0A2A            1   4855 get_control:
0A2A 82 02      112 4856                 lde     !r0,@!!scc_sts0          ;sync up to control byte
0A2C 72 04      1 6 4857                 tm      !r0, !r4
0A2E 6B FA      1   4858                 jr      z, get_control
0A30            1   4859 got_control:
0A30 82 D6      112 4860                 lde     !rD,@!!scc_sts1          ;save eof+ror for later if diag.
0A32 82 08      112 4861                 lde     !r0,@!!scc_rbuf          ;save control
0A34 09 3F      1 6 4862                 ld      lap_ctrl, !r0
0A36 A2 0A      1 6 4863                 cp      !r0, !rA                ;ckeck against exp value
0A38 6B 10      1   4864                 jr      z, save_pkt
0A3A 8B 38      1   4865                 jr      dump_pkt
0A3C            1   4866 ;done with lap header - now get data bytes
0A3C            1   4867 wait_char:
0A3C 82 C2      112 4868                 lde     !rC,@!!scc_sts0
0A3E 72 C4      1 6 4869                 tm      !rC, !r4
0A40 6B FA      1   4870                 jr      z, wait_char
0A42            1   4871 char_rdy:
0A42 82 D6      112 4872                 lde     !rD,@!!scc_sts1          ;get eof, overrun
0A44 82 08      112 4873                 lde     !r0,@!!scc_rbuf          ;get char
0A46 92 0E      112 4874                 lde     @!!rcvbuf,!r0            ;save in ram
0A48 A0 1E      110 4875                 incw    rcvbuf
0A4A            1   4876 save_pkt:
0A4A            1   4877 ;this is entry point for loop coming from lap data reads
0A4A 72 D5      1 6 4878                 tm      !rD, !r5                ;check eof or overrun
0A4C 6B EE      1   4879                 jr      z, wait_char
0A4E 46 42 20   110 4880                 or      bus_stat1, #msg_rcvd    ;set status if done 
0A51            1   4881 rcv_done:
0A51 76 ED 20   110 4882                 tm      !rD, #ror               ;check ovr bit
0A54 6B 03      1   4883                 jr      z, no_ovr
0A56 46 44 08   110 4884                 or      bus_stat3, #rorerr      ;set bit
0A59            1   4885 no_ovr:
0A59 76 ED 40   110 4886                 tm      !rD, #crc               ;check crc error
0A5C 6B 03      1   4887                 jr      z, rcv_exit
0A5E 46 45 04   110 4888                 or      bus_stat4, #scc_crcerr
0A61            1   4889 rcv_exit:
0A61 8F         1 6 4890                 di
0A62 56 42 FB   110 4891                 and     bus_stat1, #$FF - sccinten      ;clr inten bit
0A65 31 30      1 6 4892                 srp     #wrk_absys              ;restore caller's reg set
0A67 AF         114 4893                 ret
0A68            1   4894 ;below is code for dump packet
0A68            1   4895 wait_dchar:
0A68 82 C2      112 4896                 lde     !rC,@!!scc_sts0
0A6A 72 C4      1 6 4897                 tm      !rC, !r4
0A6C 6B FA      1   4898                 jr      z, wait_dchar





        WIDGET.ASSEM            Page  70
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0A6E            1   4899 dchar_rdy:
0A6E 82 D6      112 4900                 lde     !rD,@!!scc_sts1
0A70 82 08      112 4901                 lde     !r0,@!!scc_rbuf
0A72 A0 1E      110 4902                 incw    rcvbuf
0A74            1   4903 dump_pkt:
0A74            1   4904 ;this is entry point for packet dump from lap data read code
0A74 72 D5      1 6 4905                 tm      !rD, !r5                ;eof+ovr?
0A76 6B F0      1   4906                 jr      z, wait_dchar
0A78 46 45 20   110 4907                 or      bus_stat4, #typ_mismatch        ;set status for dump pkt
0A7B 8B D4      1   4908                 jr      rcv_done                ;common exit
0A7D            1   4909 
0A7D            1   4910 
0A7D            1   4911                 .LSTOFF
0A7D            1   4915                 .LSTON
0A7D            1   4916                 .FIN
0A7D            1   4917                 











































        WIDGET.ASSEM            Page  71
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0A7D            1   4918                 .page
0A7D            1   4919                                  
0A7D            1   4920 ;=============================================================================
0A7D            1   4921 ;  scctest routine:
0A7D            1   4922 ;
0A7D            1   4923 ; Puts a byte of test data (via store_testdata) from table to lap area in
0A7D            1   4924 ; Z8 registers, calls tpack with receiver initialized and enabled, calls
0A7D            1   4925 ; rpack which stores the byte plus crc in lap header area in Z8 regs, then
0A7D            1   4926 ; compares resulting byte with table data (via comp_testdata) and sets appro-
0A7D            1   4927 ; priate status and error bits in bus_stat1, 3, and 4.  These bits may also
0A7D            1   4928 ; be set by tpack or rpack.  Any error will set ab_abort bit in bus_stat3.
0A7D            1   4929 ;
0A7D            1   4930 ;  INPUTS:      SCC chip enabled via bank select
0A7D            1   4931 ;               SCC initialized
0A7D            1   4932 ;               bus_stat1, 3, and 4 cleared
0A7D            1   4933 ;
0A7D            1   4934 ;  OUTPUTS:     sccdiag bit set in bus_stat1 during execution of scctest, 
0A7D            1   4935 ;               cleared on exit.
0A7D            1   4936 ;               test byte + crc bytes stored in lap area of Z8 regs.
0A7D            1   4937 ;               bus_stat1, 3, 4 bits can be set as follows:
0A7D            1   4938 ;               bus_stat1: 
0A7D            1   4939 ;                         msg_sent   ($08)
0A7D            1   4940 ;                         msg_rcvd   ($20)
0A7D            1   4941 ;               bus_stat3:
0A7D            1   4942 ;                         no_busidle ($40)
0A7D            1   4943 ;                         scc_timout ($10)
0A7D            1   4944 ;                         rorerr     ($08)
0A7D            1   4945 ;                         ab_abort   ($80)
0A7D            1   4946 ;               bus_stat4:
0A7D            1   4947 ;                         bus_busy   ($80)
0A7D            1   4948 ;                         rcv_timout ($40)
0A7D            1   4949 ;                         typ_mismatch ($20)
0A7D            1   4950 ;                         data_mismatch($08)
0A7D            1   4951 ;                         scc_crcerr ($04)
0A7D            1   4952 ;
0A7D            1   4953 ;  Registers used:
0A7D            1   4954 ;
0A7D            1   4955 ;       r0      :loop counter and index into test data table
0A7D            1   4956 ;       r1      :test data table pointer - lo byte
0A7D            1   4957 ;       r2,r3   :scc chip register address and bank call address
0A7D            1   4958 ;       r4      :used for temp storage                                  
0A7D            1   4959 ;       r5      :same as r4
0A7D            1   4960 ;       r6      :same as r4
0A7D            1   4961 ;       r7      :not used                                                
0A7D            1   4962 ;       r8,r9   :pointer to test data table.  r9 is computed from r1 + index
0A7D            1   4963 ;       rA,rB   :pointer to id buffer in RAM: idbufhi,lo
0A7D            1   4964 ;       rC      :temp storage
0A7D            1   4965 ;       rD,rE,rF:lap header storage: their_node, our_node, lap_ctrl            
0A7D            1   4966 ;
0A7D            1   4967 ;       note:  r2,r3 defined as scc_chiphi,lo; rE,rF defined as xmtbufhi,lo
0A7D            1   4968 ;              or rcvbufhi,lo; rC,rD defined as idbufhi,lo.  Also, xmtbufhi =
0A7D            1   4969 ;              xmtbuf, etc.  
0A7D            1   4970 ;
0A7D            1   4971 ;=============================================================================





        WIDGET.ASSEM            Page  72
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0A7D            1   4972 
0A7D            1   4973 scctest:
0A7D 46 42 02   110 4974                 or       bus_stat1, #sccdiag  ;set diagnostic mode
0A80 B0 E0      1 6 4975                 clr      !r0             ;set loop counter and index into tables
0A82            1   4976 
0A82            1   4977 ;set up to transmit byte
0A82 E6 1E 10   110 4978                 ld      xmtbufhi,#.hibyte. sccxmtbuf ;starting RAM address
0A85 E6 3A 17   110 4979                 ld      idbufhi,#.hibyte. sccidbuf   ;init idbuf pointer
0A88 1C 00      1 6 4980                 ld      !r1,#.lowbyte. scctest_table  ;pointer to test bytes
0A8A 8C 0B      1 6 4981                 ld      !r8,#.hibyte. scctest_table
0A8C            1   4982                 
0A8C            1   4983 testloop:
0A8C B0 44      1 6 4984                 clr     bus_stat3
0A8E B0 45      1 6 4985                 clr     bus_stat4
0A90 56 42 F7   110 4986                 and     bus_stat1, #$FF - msg_sent      ;clear error status bits
0A93            1   4987 
0A93 98 E1      1 6 4988                 ld      !r9,!r1         ;pass data pointer to store_testdata
0A95 2C 1C      1 6 4989                 ld      !r2, #.hibyte. sccbank  ;restore r2 to scc address
0A97 3C 2D      1 6 4990                 ld      !r3,#sw6adr     ;set up sccadrs for adrs recognition reg
0A99 D6 0A F2   120 4991                 call    store_testdata     ;store the byte(s)
0A9C            1   4992 
0A9C            1   4993 ;set up for tpack and rpack - note bytecnt does not need setting; diag bit
0A9C            1   4994 ;tells tpack to xmit one byte only
0A9C            1   4995 
0A9C            1   4996 ;clear receive status bits and enable receiver
0A9C 2C 1C      1 6 4997                 ld      !r2, #.hibyte. sccbank  ;restore r2 to scc address
0A9E 3C 21      1 6 4998                 ld      !r3, #sw0cmd            ;point to cmd reg.
0AA0 4C 30      1 6 4999                 ld      !r4, #erres
0AA2 92 42      112 5000                 lde     @!!scc_chip, !r4      ;clear rcv status bits in sts reg 1
0AA4 3C 27      1 6 5001                 ld      !r3,#sw3rcv
0AA6 4C DD      1 6 5002                 ld      !r4,#rcven
0AA8 92 42      112 5003                 lde     @!!scc_chip,!r4       ;enable receiver
0AAA            1   5004 
0AAA            1   5005 ;note that tpack enables xmtr for diag mode - can't enable it now because flags
0AAA            1   5006 ;transmitted would clear sync/hunt bit and bus would never look idle to tpack 
0AAA            1   5007 ;and it would never transmit.
0AAA            1   5008                 
0AAA B0 1C      1 6 5009                 clr     boffhi
0AAC E6 1D 01   110 5010                 ld      bofflo, #1      ;set backoff count for tpack = 400us
0AAF D6 08 C0   120 5011                 call    tpack           ;transmit the packet
0AB2 76 42 08   110 5012                 tm      bus_stat1, #msg_sent    ;check for good completion sts
0AB5 6B 36      1   5013                 jr      z, scc_fail
0AB7 3C 21      1 6 5014                 ld      !r3, #sr0sts    ;set pointer since tpack used r3
0AB9 82 42      112 5015                 lde     !r4, @!!scc_sts0
0ABB 76 E4 10   110 5016                 tm      !r4, #sync_hunt         ;check state of sync/hunt bit
0ABE 6B 2D      1   5017                 jr      z, scc_fail                 ;should be set after tpack
0AC0            1   5018                 
0AC0            1   5019  ;receive the packet
0AC0 B0 1A      1 6 5020                 clr     exp_ctrl        ;clr exp value for ctrl byte - crc unk
0AC2 B0 1C      1 6 5021                 clr     rcvto_hi
0AC4 E6 1D 01   110 5022                 ld      rcvto_lo, #1    ;set timeout=200us
0AC7 D6 09 B7   120 5023                 call    rpack
0ACA            1   5024 
0ACA 76 45 20   110 5025                 tm      bus_stat4, #typ_mismatch





        WIDGET.ASSEM            Page  73
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0ACD 6B 1E      1   5026                 jr      z, scc_fail         ;typ_mismatch should be set:crc=lap_ctrl
0ACF 44 44 44   110 5027                 or      bus_stat3, bus_stat3
0AD2 EB 19      1   5028                 jr      nz, scc_fail         ;check for timeout or overrun
0AD4 76 45 44   110 5029                 tm      bus_stat4, #rcv_timout + scc_crcerr
0AD7 EB 14      1   5030                 jr      nz, scc_fail        ;check for crc err - rcv_timout should 
0AD9            1   5031                                         ;be clear if typ_mismatch is set
0AD9 98 E1      1 6 5032                 ld      !r9,!r1         ;pass table data pointer to comp_testdta
0ADB D6 0B 04   120 5033                 call    comp_testdata      ;check for correct byte(s) received
0ADE 76 45 08   110 5034                 tm      bus_stat4, #data_mismatch
0AE1 EB 0A      1   5035                 jr      nz, scc_fail         ;check for compare error
0AE3            1   5036                 
0AE3 0E         1 6 5037                 inc     !r0             ;bump loop counter and table index
0AE4 A6 E0 04   110 5038                 cp      !r0,#tlcnt      ;done with all passes (all test bytes)?
0AE7 1B A3      1   5039                 jr      lt,testloop
0AE9            1   5040 stest_done:
0AE9 56 42 FD   110 5041                 and     bus_stat1, #$FF-sccdiag  ;clear diagnostic bit
0AEC AF         114 5042                 ret
0AED            1   5043 scc_fail:
0AED 46 44 80   110 5044                 or      bus_stat3, #ab_abort
0AF0 8B F7      1   5045                 jr      stest_done
0AF2            1   5046 






































        WIDGET.ASSEM            Page  74
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0AF2            1   5047                 .page
0AF2            1   5048                 
0AF2            1   5049 ;==============================================================================
0AF2            1   5050 ; store_testdata routine
0AF2            1   5051 ;
0AF2            1   5052 ; Stores a byte of data at lap header area of Z8 regs and in the scc address
0AF2            1   5053 ; recognition register.  !r0 is passed as index into a 4-byte table at 
0AF2            1   5054 ; scctest_table.  r8r9 is a pointer to the table.  The four entries in the
0AF2            1   5055 ; table are the test bytes and also the scc receive address.
0AF2            1   5056 ;
0AF2            1   5057 ;  scctest_table:  testbyt1   testbyt2   testbyt3   testbyt4
0AF2            1   5058 ;
0AF2            1   5059 ;  INPUTS:      r0 = loop counter and index into test table
0AF2            1   5060 ;               r8,r9 = ptr to test table
0AF2            1   5061 ;               r2,r3 = ptr to scc chip address recognition register
0AF2            1   5062 ;
0AF2            1   5063 ;  OUTPUTS:     testbyte stored in xmt buffer and scc address register
0AF2            1   5064 ;
0AF2            1   5065 ;  Register usage:
0AF2            1   5066 ;
0AF2            1   5067 ;       r0:     same as in scctest              r7:     not used                
0AF2            1   5068 ;       r1:     lo byte of scctest_table ptr    r8,r9:  pointer to scctest_table
0AF2            1   5069 ;       r2,r3:  scc chip address                rA,rB:  resrvd for idbufhi,lo     
0AF2            1   5070 ;       r4   :  temp for testbyt                rC:     pointer to lap header
0AF2            1   5071 ;       r6:     not used                        rD,rE,rF: lap header                
0AF2            1   5072 ;
0AF2            1   5073 ;       note:  r2,r3 defined as scc_chiphi,lo;                             
0AF2            1   5074 ;              Also, scc_chiphi = scc_chip, etc
0AF2            1   5075 ;
0AF2            1   5076 ;==============================================================================
0AF2            1   5077 
0AF2            1   5078 store_testdata:
0AF2 02 90      1 6 5079                 add     !r9,!r0         ;add loop index to pointer
0AF4 16 E8 00   110 5080                 adc     !r8,#0
0AF7 C2 48      112 5081                 ldc     !r4,@!!r8       ;get testbyt
0AF9 CC 3D      1 6 5082                 ld      !rC,#lap_ptr    ;set up pointer
0AFB F3 C4      1 6 5083                 ld      @!rC, !r4         ;store testbyte in lap buffer
0AFD            1   5084                 
0AFD 92 42      112 5085                 lde     @!!scc_chip,!r4       ;set rcv address byte in scc
0AFF AF         114 5086                 ret
0B00            1   5087                 
0B00 55 AA 00 FF1   5088 scctest_table:  .db     testbyt1,testbyt2,testbyt3,testbyt4
0B04                5089 
















        WIDGET.ASSEM            Page  75
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0B04                5090                 .page
0B04                5091 
0B04                5092 ;============================================================================
0B04                5093 ;  comp_testdata routine
0B04                5094 ;
0B04                5095 ; Gets data just received from scc (in lap buffer), stores it in idbuffer
0B04                5096 ; for later viewing, and compares it with data from scctest_table.  
0B04                5097 ; Incorrect data value results in data_mismatch bit set in bus_stat4.
0B04                5098 
0B04                5099 ;  INPUTS:      receive data in lap receive buffer
0B04                5100 ;
0B04                5101 ;  OUTPUTS:     bus_stat4 bit, data_mismatch, set if incorrect data pattern.
0B04                5102 ; 
0B04                5103 ;  Registers:
0B04                5104 ;       
0B04                5105 ;       r0:     loop counter and index into tables
0B04                5106 ;       r1:     not used
0B04                5107 ;       r2,r3:  not used, reserved for scc chip address used by calling routine
0B04                5108 ;       r4   :  temp for testbyt
0B04                5109 ;       r5   :  not used
0B04                5110 ;       r6:     temp for received data from lap rcv buffer
0B04                5111 ;       r7:     not used         
0B04                5112 ;       r8,r9:  pointer to scctest_table
0B04                5113 ;       rA,rB:  idbufhi,lo
0B04                5114 ;       rC:     index into idbuf
0B04                5115 ;       rD,rE,rF: lap header storage
0B04                5116 ;
0B04                5117 ;=============================================================================
0B04                5118 ;
0B04                5119 comp_testdata:
0B04 E6 3B 57    10 5120                 ld      idbuflo,#.lowbyte. sccidbuf ;reset id buff ptr in RAM
0B07                5121                 
0B07 02 90        6 5122                 add     !r9,!r0         ;add loop index to table pointer
0B09 16 E8 00    10 5123                 adc     !r8,#0
0B0C C2 48       12 5124                 ldc     !r4,@!!r8       ;get current test byte from table
0B0E 68 3E        6 5125                 ld      !r6,our_node   ;get destination byte
0B10 C8 E0        6 5126                 ld      !rC,!r0         ;temp for loop index
0B12 90 EC        6 5127                 rl      !rC             ;x2 for ptr to idbuf
0B14 04 EC 3B    10 5128                 add     idbuflo,!rC     ;add the index
0B17                5129                 
0B17 92 6A       12 5130                 lde     @!!idbuf,!r6      ;move to idbuf
0B19 A2 64        6 5131                 cp      !r6, !r4        ;compare with table entry
0B1B 6B 03          5132                 jr      z, gdret    
0B1D 46 45 08    10 5133                 or      bus_stat4, #data_mismatch  ;set error bit
0B20                5134 gdret:
0B20 AF          14 5135                 ret
0B21                5136 












        WIDGET.ASSEM            Page  76
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0B21                5137                 .page
0B21                5138 
0B21                5139 ;===========================================================================
0B21                5140 ; sccmain - mainline code for scc interface
0B21                5141 ;
0B21                5142 ; General notes:
0B21                5143 ; Uses wrk_absys working register set plus bus_stat1, 3, 4 bytes to hold
0B21                5144 ; state and error information.  Ext_Push and Ext_Pop are used to save caller's
0B21                5145 ; context in diagnostic routine, so that only one working set is needed for
0B21                5146 ; the scc diagnostic.  
0B21                5147 ; 
0B21                5148 ; Extended timing is necessary to address the scc chip, so this mode is 
0B21                5149 ; enabled whenever in an scc routine.
0B21                5150 ;
0B21                5151 ;============================================================================
0B21                5152 
0B21                5153 sccmain:
0B21 31 30        6 5154                 srp     #wrk_absys
0B23 B0 42        6 5155                 clr     bus_stat1                        
0B25 E6 F8 36    10 5156                 ld      P01m, #scc_P01m ;set extended timing for ext memory
0B28                5157 
0B28                5158 ;initialize scc and do scc self-test:
0B28 0C 01        6 5159                 ld      !r0, #1
0B2A D6 08 00    20 5160                 call    edscc           ;enable scc bank
0B2D D6 08 07    20 5161                 call    initscc         ;initialize scc chip registers
0B30 D6 0A 7D    20 5162                 call    scctest         ;do loopback test on scc
0B33 E6 F8 16    10 5163                 ld      P01m, #wig_adrdata      ;restore non-extended timing
0B36 AF          14 5164                 ret
0B37                5165 
0B37                5166                 .LSTOFF
0B37                5170                 .LSTON
0B37                5171                 .FIN



























        WIDGET.ASSEM            Page  77
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0B37                5172                 .PAGE
0B37                5173 ;-------------------------------------------------------------------------------
0B37                5174 ;
0B37                5175 ;               AB start -- Applebus entry point
0B37                5176 ;
0B37                5177 ;-------------------------------------------------------------------------------
0B37                5178 
0B37 D6 0B 21    20 5179 AB_start:       CALL    sccmain
0B3A D6 0B FF    20 5180                 CALL    AB_init                 ;Initialize our vars
0B3D D6 0C 70    20 5181                 CALL    Select_node             ;Get a node number
0B40 7B FE          5182 AB_dead:        JR      c,AB_dead               ;Lock up if no node number
0B42                5183                 
0B42 D6 0C 32    20 5184                 CALL    Save_reg                ;Save context and fall through
0B45                5185 
0B45                5186 ;-------------------------------------------------------------------------------
0B45                5187 ;
0B45                5188 ;               AB main -- Applebus main program
0B45                5189 ;
0B45                5190 ;-------------------------------------------------------------------------------
0B45                5191 
0B45 D6 0C 41    20 5192 AB_main:        CALL    Restore_reg             ;Main entry point
0B48                5193 
0B48 E6 46 10    10 5194 AB_main_loop:   LD      io_buff_hi,#.HIBYTE.Cmnd_Ptr  ;Set up pointer to data
0B4B E6 47 1A    10 5195                 LD      io_buff_lo,#.LOWBYTE.Cmnd_Ptr
0B4E                5196                 
0B4E B0 42        6 5197                 CLR     bus_stat1               ;Clear old state
0B50 B0 44        6 5198                 CLR     bus_stat3
0B52 B0 45        6 5199                 CLR     bus_stat4
0B54 B0 4B        6 5200                 CLR     curr_node               ;Clear to receive from any node
0B56 31 10        6 5201                 SRP     #wrk_sys                ;Use other bank
0B58 0C 01        6 5202                 LD      !r0,#1                  ;Enable scc
0B5A D6 08 00    20 5203                 CALL    edscc
0B5D                5204                 
0B5D 31 30        6 5205                 SRP     #wrk_absys
0B5F D6 0E 30    20 5206                 CALL    Get_packet
0B62                5207                 
0B62 76 42 80    10 5208                 TM      bus_stat1,#d_busy       ;Check for cmd pending
0B65 EB 16          5209                 JR      nz,AB_interp
0B67                5210                 
0B67 76 43 10    10 5211                 TM      bus_stat2,#diag_bit     ;Check if last command was diag
0B6A EB DC          5212                 JR      nz,AB_main_loop         ;If true then no free process
0B6C                5213                 
0B6C D6 0C 32    20 5214                 CALL    Save_reg                ;Save status
0B6F                5215                 
0B6F 31 10        6 5216                 SRP     #wrk_sys                ;Do free process
0B71 B0 E0        6 5217                 CLR     !r0                     ;Disable scc
0B73 D6 08 00    20 5218                 CALL    edscc
0B76                5219                 
0B76 2C 2D        6 5220                 LD      !r2,#.HIBYTE.Strt_FreeProcess
0B78 3C 8A        6 5221                 LD      !r3,#.LOWBYTE.Strt_FreeProcess
0B7A D6 04 10    20 5222                 CALL    Bank_Call
0B7D                5223                 
0B7D                5224 ;-------------------------------------------------------------------------------
0B7D                5225 ;





        WIDGET.ASSEM            Page  78
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0B7D                5226 ;       AB interp -- Interpret the widget call
0B7D                5227 ;
0B7D                5228 ;-------------------------------------------------------------------------------
0B7D E4 3D 4B    10 5229 AB_interp:      LD      curr_node,their_node    ;Save the senders node number
0B80 31 40        6 5230                 SRP     #wrk_global             ;Use pointer already set
0B82 82 36       12 5231                 LDE     !r3,@!!r6               ;Get the instruction in stat2
0B84 31 30        6 5232                 SRP     #wrk_absys
0B86                5233                 
0B86 D6 0C 32    20 5234 Normal_int:     CALL    Save_reg                ;Save working sets
0B89 31 10        6 5235                 SRP     #wrk_sys
0B8B B0 E0        6 5236                 CLR     !r0                     ;Disable scc
0B8D D6 08 00    20 5237                 CALL    edscc
0B90 2C 11        6 5238                 LD      !r2,#.HIBYTE.Start_Command      ;Jump to Widget control
0B92 3C 9C        6 5239                 LD      !r3,#.LOWBYTE.Start_Command
0B94 D6 04 10    20 5240                 CALL    Bank_Call
0B97                5241                 
0B97                5242 ;--------------------------------------------------------------------------
0B97                5243 ;
0B97                5244 ;       Return handler -- Widget returns here after command completion
0B97                5245 ;
0B97                5246 ;----------------------------------------------------------------------
0B97 50 E0       10 5247 AB_multi_ret:   POP     !r0                     ;Remove return address
0B99 50 E1       10 5248                 POP     !r1                     ;If multiblock read
0B9B 0C 01        6 5249                 LD      !r0,#1                  ;Enable scc
0B9D D6 08 00    20 5250                 CALL    edscc
0BA0 D6 0C 41    20 5251                 CALL    Restore_reg             ;Restore context
0BA3 8B 0B          5252                 JR      AB_ret2                 ;leap
0BA5                5253                 
0BA5 0C 01        6 5254 AB_return:      LD      !r0,#1                  ;Enable scc
0BA7 D6 08 00    20 5255                 CALL    edscc
0BAA D6 0C 41    20 5256                 CALL    Restore_reg             ;Restore context
0BAD 56 43 DF    10 5257                 AND     bus_stat2,#$FF-multi_bit   ;Clear multi flag
0BB0                5258                 
0BB0 A6 43 01    10 5259 AB_ret2:        CP      bus_stat2,#write_cmd            ;Is this a write return
0BB3 EB 08          5260                 JR      ne,AB_ret3                      ;Branch if not
0BB5                5261                 
0BB5 E6 48 00    10 5262                 LD      io_cnt_hi,#.HIBYTE.write_len    ;Size of packet
0BB8 E6 49 07    10 5263                 LD      io_cnt_lo,#.LOWBYTE.write_len
0BBB 8B 06          5264                 JR      Abus_send
0BBD                5265                 
0BBD E6 48 02    10 5266 AB_ret3:        LD      io_cnt_hi,#.HIBYTE.read_len     ;Size of packet
0BC0 E6 49 0B    10 5267                 LD      io_cnt_lo,#.LOWBYTE.read_len
0BC3                5268                 
0BC3 E6 46 10    10 5269 Abus_send:      LD      io_buff_hi,#.HIBYTE.StatusArray  ;Start of data buffer
0BC6 E6 47 12    10 5270                 LD      io_buff_lo,#.LOWBYTE.StatusArray
0BC9 D6 0E A3    20 5271                 CALL    Send_packet             ;Return the data
0BCC A6 43 26    10 5272                 CP      bus_stat2,#multi        ;Check for multiblock
0BCF 6B 03          5273                 JR      eq,AB_multi_cont
0BD1                5274                 
0BD1 8D 0B 48       5275                 JP      AB_main_loop    
0BD4                5276                 
0BD4 D6 0C 32    20 5277 AB_multi_cont:  CALL    Save_reg                ;Save working sets
0BD7 31 10        6 5278                 SRP     #wrk_sys
0BD9 B0 E0        6 5279                 CLR     !r0                     ;Disable scc





        WIDGET.ASSEM            Page  79
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0BDB D6 08 00    20 5280                 CALL    edscc
0BDE 2C 02        6 5281                 LD      !r2,#.HIBYTE.Sys_Ret    ;Set up bank to multiblock
0BE0 3C 7A        6 5282                 LD      !r3,#.LOWBYTE.Sys_Ret   ;  continuation routine
0BE2 D6 04 10    20 5283                 CALL    Bank_Call               ;Continue multiblock read  
0BE5                5284                 
0BE5                5285 ;--------------------------------------------------------------------------
0BE5                5286 ;
0BE5                5287 ;       Abort handler -- Widget returns here if an abort took place
0BE5                5288 ;
0BE5                5289 ;----------------------------------------------------------------------
0BE5 76 24 10    10 5290 Abus_abort:     TM      Excpt_Stat,#PwrRst      ;Check if  power up abort
0BE8 6B 03          5291                 JR      z,Ab_ab2                ;Branch if not
0BEA 8D 0B 37       5292                 JP      AB_Start                ;Init system
0BED                5293                 
0BED 0C 01        6 5294 Ab_ab2:         LD      !r0,#1                  ;Enable scc
0BEF D6 08 00    20 5295                 CALL    edscc
0BF2 D6 0C 41    20 5296                 CALL    Restore_reg
0BF5 E6 48 00    10 5297                 LD      io_cnt_hi,#.HIBYTE.status_len   ;Size of packet
0BF8 E6 49 07    10 5298                 LD      io_cnt_lo,#.LOWBYTE.status_len
0BFB B0 43        6 5299                 CLR     bus_stat2               ;Clear old command
0BFD 8B C4          5300                 JR      Abus_send               ;Stay in loop
0BFF                5301                 
0BFF                5302                 
0BFF                5303 ;-------------------------------------------------------------------------------
0BFF                5304 ;
0BFF                5305 ;               AB init -- Initializes the global variables.
0BFF                5306 ;
0BFF                5307 ;-------------------------------------------------------------------------------
0BFF                5308 
0BFF B0 42        6 5309 AB_init:        CLR     bus_stat1               ;Init the variables
0C01 B0 43        6 5310                 CLR     bus_stat2
0C03 B0 44        6 5311                 CLR     bus_stat3
0C05 B0 45        6 5312                 CLR     bus_stat4
0C07                5313                 
0C07 B0 46        6 5314                 CLR     io_buff_hi
0C09 B0 47        6 5315                 CLR     io_buff_lo
0C0B                5316                 
0C0B B0 48        6 5317                 CLR     io_cnt_hi
0C0D B0 49        6 5318                 CLR     io_cnt_lo
0C0F                5319                 
0C0F B0 4C        6 5320                 CLR     our_sckt
0C11 B0 4D        6 5321                 CLR     their_sckt
0C13 B0 4B        6 5322                 CLR     curr_node
0C15 B0 3E        6 5323                 CLR     our_node
0C17 B0 3D        6 5324                 CLR     their_node
0C19 B0 3F        6 5325                 CLR     lap_ctrl
0C1B E6 4E 01    10 5326                 LD      boff_hist,#01
0C1E E6 4F 03    10 5327                 LD      boff_mask,#03
0C21                5328                 
0C21 31 30        6 5329                 SRP     #wrk_absys
0C23 4C 17        6 5330                 LD      !pntr_hi,#.HIBYTE.sckt_tab  ;Clear the socket table
0C25 5C 57        6 5331                 LD      !pntr_lo,#.LOWBYTE.sckt_tab
0C27 9C 20        6 5332                 LD      !tab_size,#$20          ;32 elements
0C29 B0 EA        6 5333                 CLR     !ddp_temp





        WIDGET.ASSEM            Page  80
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0C2B                5334                 
0C2B 92 A4       12 5335 AB_init_loop:   LDE     @!!pntr,!ddp_temp               ;Clear an entry
0C2D A0 E4       10 5336                 INCW    !pntr
0C2F 9A FA          5337                 DJNZ    !tab_size,AB_init_loop
0C31 AF          14 5338                 RET
0C32                5339                 
0C32                5340                 




















































        WIDGET.ASSEM            Page  81
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0C32                5341                 .PAGE
0C32                5342 ;-------------------------------------------------------------------------------
0C32                5343 ;
0C32                5344 ;               Misc utility routines.
0C32                5345 ;
0C32                5346 ;-------------------------------------------------------------------------------
0C32                5347 
0C32                5348 ;-------------------------------------------------------------------------------
0C32                5349 ;
0C32                5350 ;               Save/Restore Reg -- Save and restore working sets 30 & 40
0C32                5351 ;               to external memory.
0C32                5352 ;
0C32                5353 ;-------------------------------------------------------------------------------
0C32                5354 
0C32 31 10        6 5355 Save_reg:       SRP     #wrk_sys
0C34 0C 17        6 5356                 LD      !r0,#.HIBYTE.reg_store  ;Get the pointer to ram
0C36 1C 77        6 5357                 LD      !r1,#.LOWBYTE.reg_store
0C38 2C 30        6 5358                 LD      !r2,#Wrk_sys2           ;Start at $30
0C3A 3C 20        6 5359                 LD      !r3,#reg_cnt            ;And save two sets
0C3C                5360                 
0C3C 93 20       18 5361 S_R_loop:       LDEI    @!!r0,@!r2              ;Save a reg
0C3E 3A FC          5362                 DJNZ    !r3,S_R_loop            ;Again
0C40 AF          14 5363                 RET
0C41                5364                 
0C41                5365                 
0C41 31 10        6 5366 Restore_reg:    SRP     #wrk_sys
0C43 0C 17        6 5367                 LD      !r0,#.HIBYTE.reg_store  ;Get the pointer to ram
0C45 1C 77        6 5368                 LD      !r1,#.LOWBYTE.reg_store
0C47 2C 30        6 5369                 LD      !r2,#Wrk_sys2           ;Start at $30
0C49 3C 20        6 5370                 LD      !r3,#reg_cnt            ;And save two sets
0C4B                5371                 
0C4B 83 20       18 5372 R_R_loop:       LDEI    @!r2,@!!r0              ;Get a reg
0C4D 3A FC          5373                 DJNZ    !r3,R_R_loop            ;Again
0C4F 31 30        6 5374                 SRP     #wrk_absys
0C51 AF          14 5375                 RET
0C52                5376                 
0C52                5377 ;-------------------------------------------------------------------------------
0C52                5378 ;
0C52                5379 ;               Rangen -- Generates a new random number in seed (16 bit)
0C52                5380 ;
0C52                5381 ;-------------------------------------------------------------------------------
0C52                5382 
0C52 4C 05        6 5383 Rangen:         LD      !rand_cnt,#5            ;Loop 5 times
0C54 D6 0C 60    20 5384 Rand:           CALL    Mult5                   ;Multiply by 5
0C57 4A FB          5385                 DJNZ    !rand_cnt,Rand
0C59 06 41 39    10 5386                 ADD     seedlo,#$39             ;Add offset ($0039)
0C5C 16 40 00    10 5387                 ADC     seedhi,#$00
0C5F AF          14 5388                 RET
0C60                5389                 
0C60 98 41        6 5390 Mult5:          LD      !rand_temp,seedlo       ;Get seed
0C62 A8 40        6 5391                 LD      !rand2_temp,seedhi
0C64 CF           6 5392                 RCF
0C65 10 E9        6 5393                 RLC     !rand_temp              ;Shift left
0C67 10 EA        6 5394                 RLC     !rand2_temp





        WIDGET.ASSEM            Page  82
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0C69 04 E9 41    10 5395                 ADD     seedlo,!rand_temp       ;Add for *5
0C6C 14 EA 40    10 5396                 ADC     seedhi,!rand2_temp
0C6F AF          14 5397                 RET
0C70                5398 
0C70                5399 ;-------------------------------------------------------------------------------
0C70                5400 ;
0C70                5401 ;               Select node -- Find a node number for us to use
0C70                5402 ;                              Returns: carry=0  node found
0C70                5403 ;                                       carry=1  fatal error or node not found
0C70                5404 ;
0C70                5405 ;-------------------------------------------------------------------------------
0C70                5406 
0C70 6C 10        6 5407 Select_node:    LD      !sel_cnt,#find_cnt      ;Try many times
0C72 D6 0C 52    20 5408 Select_loop:    CALL    Rangen                  ;Get a random node number
0C75 E4 40 3E    10 5409                 LD      our_node,seed_hi
0C78 46 3E 80    10 5410                 OR      our_node,#$80           ;In range 128-254
0C7B A6 3E FF    10 5411                 CP      our_node,#$FF
0C7E 6B F2          5412                 JR      eq,Select_loop          ;May need to retry
0C80 E4 3E 4A    10 5413                 LD      my_node,our_node        ;This is how we do it
0C83                5414                 
0C83 E6 4A B7    10 5415                 LD      my_node,#$B7            ;Hardwired
0C86 E6 3E B7    10 5416                 LD      our_node,#$B7
0C89                5417                 
0C89 4C 1C        6 5418                 LD      !pntr_hi,#.HIBYTE.scc_bank ;Set up scc for node number
0C8B 5C 2D        6 5419                 LD      !pntr_lo,#sw6adr
0C8D 98 3E        6 5420                 LD      !rand_temp,our_node     ;Get the number we selected
0C8F 92 94       12 5421                 LDE     @!!pntr,!rand_temp
0C91                5422                 
0C91 D6 0C A1    20 5423                 CALL    Select_1                ;Try for response
0C94 7B 02          5424                 JR      c,Select_try            ;If one then try again
0C96                5425                 
0C96 CF           6 5426                 RCF                             ;Flag success
0C97 AF          14 5427                 RET
0C98                5428                 
0C98 76 44 98    10 5429 Select_try:     TM      bus_stat3,#fatal
0C9B EB 02          5430                 JR      nz,Select_fail          ;Stop on fatal error
0C9D                5431                 
0C9D 6A D3          5432                 DJNZ    !sel_cnt,Select_loop    ;Try again
0C9F                5433                 
0C9F DF           6 5434 Select_fail:    SCF                             ;Flag error (fatal or cant select)
0CA0 AF          14 5435                 RET
0CA1                5436 
0CA1                5437 ;-------------------------------------------------------------------------------
0CA1                5438 ;
0CA1                5439 ;               Select 1 -- Sends an RTS to itself and waits for reply.
0CA1                5440 ;                           Returns carry clear if no reply in 16 ties.
0CA1                5441 ;                           Returns carry set if a reply in 16 tries or
0CA1                5442 ;                           fatal condition exists.
0CA1                5443 ;
0CA1                5444 ;-------------------------------------------------------------------------------
0CA1                5445                 
0CA1 CC 10        6 5446 Select_1:       LD      !retry_cnt,#xmt_retries ;Get the retry count
0CA3                5447 
0CA3 D6 0C 52    20 5448 Select_2:       CALL    Rangen                  ;Get the backoff value





        WIDGET.ASSEM            Page  83
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0CA6 E4 40 1D    10 5449                 LD      bofflo,seedhi           ;Start with a random number
0CA9 56 1D 3F    10 5450                 AND     bofflo,#$3F             ;Get lower 6 bits
0CAC 06 1D 4B    10 5451                 ADD     bofflo,#$4B             ;Put back off on range 30-60 ms.
0CAF B0 1C        6 5452                 CLR     boffhi
0CB1 46 42 01    10 5453                 OR      bus_stat1,#lap_only     ;No data to send
0CB4 56 42 D7    10 5454                 AND     bus_stat1,#$FF-msg_sent-msg_rcvd   ;Clear bit
0CB7 E4 4A 3D    10 5455                 LD      their_node,my_node      ;Send to ourself
0CBA E4 4A 3E    10 5456                 LD      our_node,my_node
0CBD E6 3F 81    10 5457                 LD      lap_ctrl,#ENQcode       ;Set up lap code
0CC0 E6 1E 17    10 5458                 LD      rt_pntr_hi,#.HIBYTE.dummy  ;Set up pointer to lap buffer
0CC3 E6 1F 77    10 5459                 LD      rt_pntr_lo,#.LOWBYTE.dummy
0CC6                5460                 
0CC6 D6 08 C0    20 5461                 CALL    tpack                   ;Send the packet
0CC9 76 42 08    10 5462                 TM      bus_stat1,#msg_sent     ;Check for sent message
0CCC EB 07          5463                 JR      nz,Select_3             ;Branch if no error
0CCE                5464                 
0CCE 76 44 98    10 5465                 TM      bus_stat3,#fatal        ;Check for fatal errors
0CD1 6B D0          5466                 JR      z,Select_2              ;Branch if non fatal
0CD3                5467                 
0CD3 DF           6 5468                 SCF                             ;Flag error
0CD4 AF          14 5469                 RET
0CD5                5470                 
0CD5 46 42 40    10 5471 Select_3:       OR      bus_stat1,#l_busy       ;Set l_busy true
0CD8 E6 1A 82    10 5472                 LD      exp_ctrl,#ACKcode       ;Set up lap code
0CDB B0 1C        6 5473                 CLR     boff_hi                 ;Set 200 us time out
0CDD E6 1D 01    10 5474                 LD      boff_lo,#1
0CE0                5475                 
0CE0 D6 09 B7    20 5476                 CALL    rpack
0CE3 76 42 20    10 5477                 TM      bus_stat1,#msg_rcvd     ;Check for messege received
0CE6 EB 04          5478                 JR      nz,Sel_out
0CE8                5479                 
0CE8 CA B9          5480 Select_4:       DJNZ    !retry_cnt,Select_2     ;Try again
0CEA CF           6 5481                 RCF                             ;All is ok
0CEB AF          14 5482                 RET
0CEC                5483                 
0CEC DF           6 5484 Sel_out:        SCF                             ;Flag error
0CED AF          14 5485                 RET
0CEE                5486 
0CEE                5487 ;-------------------------------------------------------------------------------
0CEE                5488 ;
0CEE                5489 ;               Get backoff -- Calculate a random backoff value
0CEE                5490 ;
0CEE                5491 ;-------------------------------------------------------------------------------
0CEE                5492 
0CEE AC 08        6 5493 Get_boff:       LD      !boff_cnt,#8            ;Count the history
0CF0 B0 E9        6 5494                 CLR     !boff_temp              ;Clear accumulator
0CF2 90 4E        6 5495 B_loop:         RL      boff_hist               ;Shift the history
0CF4 16 E9 00    10 5496                 ADC     !boff_temp,#0           ;Add the incidence
0CF7 AA F9          5497                 DJNZ    !boff_cnt,B_loop
0CF9                5498                 
0CF9 E6 4E 01    10 5499                 LD      boff_hist,#$01          ;Clear old value
0CFC A6 E9 02    10 5500                 CP      !boff_temp,#2           ;Check for need to alter
0CFF 1B 03          5501                 JR      lt,Dec_mask             ;If less than, shrink mask
0D01 AB 0A          5502                 JR      gt,Inc_mask             ;If GT,enlarge mask





        WIDGET.ASSEM            Page  84
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0D03 AF          14 5503                 RET                             ;Else do nothing
0D04                5504                 
0D04 E0 4F        6 5505 Dec_mask:       RR      boff_mask               ;Make small
0D06 56 4F 0F    10 5506                 AND     boff_mask,#$0F          ;Limit size
0D09 46 4F 03    10 5507                 OR      boff_mask,#$03          ;Must be at least 3
0D0C AF          14 5508                 RET
0D0D                5509                 
0D0D DF           6 5510 Inc_mask:       SCF                             ;Set bit
0D0E 10 4F        6 5511                 RLC     boff_mask               ;Make big
0D10 56 4F 0F    10 5512                 AND     boff_mask,#$0F          ;Limit size to 0F
0D13 AF          14 5513                 RET
0D14                5514                 
0D14                5515                  














































        WIDGET.ASSEM            Page  85
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0D14                5516                 .PAGE
0D14                5517 ;-------------------------------------------------------------------------------
0D14                5518 ;
0D14                5519 ;       DDP Level -- Datagram Delivery Protocol level. This level does socket
0D14                5520 ;                    management; ie allocation, de-allocation, check for
0D14                5521 ;                    correct protocol type for next level up, insertion of
0D14                5522 ;                    socket numbers for lower levels.
0D14                5523 ;
0D14                5524 ;
0D14                5525 ;-------------------------------------------------------------------------------
0D14                5526 
0D14                5527 ;-------------------------------------------------------------------------------
0D14                5528 ;
0D14                5529 ;       Get DDP -- Attempts to receive a packet. If packet is received then
0D14                5530 ;                  it is checked to see if it is a socket management call
0D14                5531 ;                  or an ATP packet. An ATP packet must be directed to an 
0D14                5532 ;                  already opened socket. DDP level calls are handled here.
0D14                5533 ;
0D14                5534 ;-------------------------------------------------------------------------------
0D14                5535 
0D14 80 46       10 5536 Get_DDP:        DECW    io_buff                 ;Move receive pointer to
0D16 80 46       10 5537                 DECW    io_buff                 ; make room for DDP
0D18 80 46       10 5538                 DECW    io_buff
0D1A D6 0E 30    20 5539                 CALL    Get_packet              ;Receive a packet
0D1D FB 01          5540                 JR      nc,Got_DDP              ;Branch if received ok
0D1F AF          14 5541                 RET
0D20                5542                 
0D20 48 46        6 5543 Got_DDP:        LD      !pntr_hi,io_buff_hi     ;Get the pointer to the data
0D22 58 47        6 5544                 LD      !pntr_lo,io_buff_lo
0D24 82 A4       12 5545                 LDE     !ddp_temp,@!!pntr
0D26 A9 4C        6 5546                 LD      our_sckt,!ddp_temp      ;Get destination socket
0D28 A0 E4       10 5547                 INCW    !pntr
0D2A 82 A4       12 5548                 LDE     !ddp_temp,@!!pntr
0D2C A9 4D        6 5549                 LD      their_sckt,!ddp_temp    ;Get source socket
0D2E A0 E4       10 5550                 INCW    !pntr
0D30 82 A4       12 5551                 LDE     !ddp_temp,@!!pntr
0D32 A0 E4       10 5552                 INCW    !pntr
0D34 A6 EA 10    10 5553                 CP      !ddp_temp,#HDPcode      ;Check if correct protocol
0D37 6B 02          5554                 JR      eq,Got_DDP_cont
0D39                5555                 
0D39 CF           6 5556                 RCF                             ;Clear error -ignore packet
0D3A AF          14 5557                 RET
0D3B                5558                 
0D3B 6C 17        6 5559 Got_DDP_cont:   LD      !aux_pntr_hi,#.HIBYTE.sckt_tab ;Get pointer to socket table
0D3D 7C 57        6 5560                 LD      !aux_pntr_lo,#.LOWBYTE.sckt_tab
0D3F 82 86       12 5561                 LDE     !sckt_cnt,@!!aux_pntr   ;Get sockets used count
0D41 A6 4C 00    10 5562                 CP      our_sckt,#0             ;Socket allocate call?
0D44 EB 67          5563                 JR      ne,Sckt_de_alloc        ;Branch if not
0D46                5564                 
0D46 A6 E8 0F    10 5565                 CP      !sckt_cnt,#open_max     ;Check for socket available
0D49 1B 22          5566                 JR      lt,Alloc_sckt           ;If so, allocate one
0D4B                5567                 
0D4B 80 E4       10 5568 No_sckt_avail:  DECW    !pntr                   ;Store DDP header
0D4D AC 10        6 5569                 LD      !ddp_temp,#HDPcode      ;Protocol





        WIDGET.ASSEM            Page  86
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0D4F 92 A4       12 5570                 LDE     @!!pntr,!ddp_temp
0D51 80 E4       10 5571                 DECW    !pntr
0D53 A8 4C        6 5572                 LD      !ddp_temp,our_sckt      ;Source
0D55 92 A4       12 5573                 LDE     @!!pntr,!ddp_temp
0D57 80 E4       10 5574                 DECW    !pntr
0D59 A8 4C        6 5575                 LD      !ddp_temp,our_sckt      ;Dest. (It's all zeros)
0D5B 92 A4       12 5576                 LDE     @!!pntr,!ddp_temp
0D5D B0 48        6 5577                 CLR     io_cnt_hi               ;3 byte DDP message
0D5F E6 49 03    10 5578                 LD      io_cnt_lo,#3
0D62 D6 0E A3    20 5579                 CALL    Send_packet             ;Send the reply -none avail
0D65 76 44 98    10 5580                 TM      bus_stat3,#fatal        ;Check for fatal error
0D68 ED 0D FD       5581                 JP      nz,DDP_done
0D6B                5582                 
0D6B CF           6 5583                 RCF                             ;Ignore other errors
0D6C AF          14 5584                 RET
0D6D                5585                 
0D6D 9C 0E        6 5586 Alloc_sckt:     LD      !tab_size,#14           ;Only 14 tries needed
0D6F A0 E6       10 5587 Search_sckt:    INCW    !aux_pntr               ;Next in table
0D71 82 A6       12 5588                 LDE     !ddp_temp,@!!aux_pntr   ;Get table value
0D73 A6 EA 00    10 5589                 CP      !ddp_temp,#0            ;Check if used
0D76 6B 02          5590                 JR      eq,Empty_sckt           ;Branch if not
0D78                5591                 
0D78 9A F5          5592                 DJNZ    !tab_size,Search_sckt    ;Loop til one found
0D7A                5593 
0D7A 69 4C        6 5594 Empty_sckt:     LD      our_sckt,!aux_pntr      ;Get our socket number
0D7C 26 4C 57    10 5595                 SUB     our_sckt,#.LOWBYTE.sckt_tab   ; =pntr-base
0D7F 80 E4       10 5596                 DECW    !pntr                   ;Store DDP header
0D81 AC 10        6 5597                 LD      !ddp_temp,#HDPcode      ;Protocol
0D83 92 A4       12 5598                 LDE     @!!pntr,!ddp_temp
0D85 80 E4       10 5599                 DECW    !pntr
0D87 A8 4C        6 5600                 LD      !ddp_temp,our_sckt      ;Source
0D89 92 A4       12 5601                 LDE     @!!pntr,!ddp_temp
0D8B 80 E4       10 5602                 DECW    !pntr
0D8D A8 4D        6 5603                 LD      !ddp_temp,their_sckt    ;Dest
0D8F 92 A4       12 5604                 LDE     @!!pntr,!ddp_temp
0D91 B0 48        6 5605                 CLR     io_cnt_hi               ;3 byte DDP message
0D93 E6 49 03    10 5606                 LD      io_cnt_lo,#3
0D96                5607                 
0D96 D6 0E A3    20 5608                 CALL    Send_packet             ;Send the reply -here is your
0D99 7B 62          5609                 JR      c,DDP_done              ; socket number
0D9B                5610                 
0D9B A8 4D        6 5611                 LD      !ddp_temp,their_sckt
0D9D 92 A6       12 5612                 LDE     @!!aux_pntr,!ddp_temp   ;Save the sckt num in table
0D9F 06 E7 10    10 5613                 ADD     !aux_pntr_lo,#16        ;Add offset to node number
0DA2 A8 3D        6 5614                 LD      !ddp_temp,their_node    ;Get the node number of the request
0DA4 92 A6       12 5615                 LDE     @!!aux_pntr,!ddp_temp   ;Save it
0DA6 20 08        6 5616                 INC     sckt_cnt                ;Increment count
0DA8 7C 57        6 5617                 LD      !aux_pntr_lo,#.LOWBYTE.sckt_tab
0DAA 92 86       12 5618                 LDE     @!!aux_pntr,!sckt_cnt   ;Save count
0DAC AF          14 5619                 RET
0DAD                5620                 
0DAD A6 4D 00    10 5621 Sckt_de_alloc:  CP      their_sckt,#0           ;Is it a de-alloc call
0DB0 EB 0D          5622                 JR      ne,Sckt_match           ;Branch if not
0DB2                5623                 





        WIDGET.ASSEM            Page  87
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0DB2 00 E8        6 5624                 DEC     !sckt_cnt               ;Remove allocated socket
0DB4 92 86       12 5625                 LDE     @!!aux_pntr,!sckt_cnt   ;Fix count
0DB6 04 E7 4C    10 5626                 ADD     our_sckt,!aux_pntr_lo   ;Index into the socket table
0DB9 B0 E8        6 5627                 CLR     !sckt_cnt
0DBB 92 86       12 5628                 LDE     @!!aux_pntr,!sckt_cnt   ;Clear the entry (their=0)
0DBD CF           6 5629                 RCF
0DBE AF          14 5630                 RET
0DBF                5631                 
0DBF 04 4C E7    10 5632 Sckt_match:     ADD     !aux_pntr_lo,our_sckt   ;Index into the socket table
0DC2 82 A6       12 5633                 LDE     !ddp_temp,@!!aux_pntr   ;Get our value
0DC4 A4 4D EA    10 5634                 CP      !ddp_temp,their_sckt    ;Compare the values
0DC7 EB 15          5635                 JR      ne,Sckt_no_match        ;Branch if match
0DC9                5636                 
0DC9 06 E7 10    10 5637                 ADD     !aux_pntr_lo,#16        ;Add offset to node number
0DCC 82 A6       12 5638                 LDE     !ddp_temp,@!!aux_pntr   ;Get node number
0DCE A4 3D EA    10 5639                 CP      !ddp_temp,their_node    ;Check if valid
0DD1 EB 0B          5640                 JR      ne,Sckt_no_match
0DD3                5641                 
0DD3 46 42 80    10 5642                 OR      bus_stat1,#d_busy       ;Transaction level busy
0DD6 80 48       10 5643                 DECW    io_cnt                  ;Reduce byte count
0DD8 80 48       10 5644                 DECW    io_cnt
0DDA 80 48       10 5645                 DECW    io_cnt
0DDC CF           6 5646                 RCF                             ;ATP packet received
0DDD AF          14 5647                 RET
0DDE                5648                 
0DDE AC 10        6 5649 Sckt_no_match:  LD      !ddp_temp,#HDPcode
0DE0 80 E4       10 5650                 DECW    !pntr                   ;Store DDP header
0DE2 92 A4       12 5651                 LDE     @!!pntr,!ddp_temp
0DE4 80 E4       10 5652                 DECW    !pntr
0DE6 B0 EA        6 5653                 CLR     !ddp_temp               ;Send reply -no match
0DE8 92 A4       12 5654                 LDE     @!!pntr,!ddp_temp       ;Store source sckt
0DEA 80 E4       10 5655                 DECW    !pntr
0DEC 92 A4       12 5656                 LDE     @!!pntr,!ddp_temp       ;Store dest sckt
0DEE B0 48        6 5657                 CLR     io_cnt_hi               ;3 byte DDP message
0DF0 E6 49 03    10 5658                 LD      io_cnt_lo,#3
0DF3                5659                 
0DF3 D6 0E A3    20 5660                 CALL    Send_packet             ;Send the reply -none avail
0DF6 76 44 98    10 5661                 TM      bus_stat3,#fatal        ;Check for fatal error
0DF9 EB 02          5662                 JR      nz,DDP_done
0DFB                5663                 
0DFB CF           6 5664                 RCF                             ;Ignore other errors
0DFC AF          14 5665                 RET
0DFD                5666 
0DFD DF           6 5667 DDP_done:       SCF                             ;Flag error
0DFE AF          14 5668                 RET     
0DFF                5669                 
0DFF                5670 ;-------------------------------------------------------------------------------
0DFF                5671 ;
0DFF                5672 ;       Send DDP -- Sends a DDP packet.
0DFF                5673 ;
0DFF                5674 ;-------------------------------------------------------------------------------
0DFF                5675 
0DFF 6C 17        6 5676 Send_DDP:       LD      !aux_pntr_hi,#.HIBYTE.sckt_tab ;Look up socket pair
0E01 7C 57        6 5677                 LD      !aux_pntr_lo,#.LOWBYTE.sckt_tab





        WIDGET.ASSEM            Page  88
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0E03 04 4C E7    10 5678                 ADD     !aux_pntr_lo,our_sckt   ;Index into table
0E06 82 A6       12 5679                 LDE     !ddp_temp,@!!aux_pntr   ;Get their socket
0E08 A9 4D        6 5680                 LD      their_sckt,!ddp_temp
0E0A                5681                 
0E0A 48 46        6 5682                 LD      !pntr_hi,io_buff_hi     ;Get pointer to data
0E0C 58 47        6 5683                 LD      !pntr_lo,io_buff_lo
0E0E 80 46       10 5684                 DECW    io_buff
0E10 80 E4       10 5685                 DECW    !pntr                   ;Store DDP header
0E12 AC 10        6 5686                 LD      !ddp_temp,#HDPcode      ;Store protocol
0E14 92 A4       12 5687                 LDE     @!!pntr,!ddp_temp
0E16 80 46       10 5688                 DECW    io_buff
0E18 80 E4       10 5689                 DECW    !pntr
0E1A A8 4C        6 5690                 LD      !ddp_temp,our_sckt
0E1C 92 A4       12 5691                 LDE     @!!pntr,!ddp_temp
0E1E 80 46       10 5692                 DECW    io_buff
0E20 80 E4       10 5693                 DECW    !pntr
0E22 A8 4D        6 5694                 LD      !ddp_temp,their_sckt    ;And the dest.
0E24 92 A4       12 5695                 LDE     @!!pntr,!ddp_temp
0E26 A0 48       10 5696                 INCW    io_cnt                  ;Adjust send count
0E28 A0 48       10 5697                 INCW    io_cnt
0E2A A0 48       10 5698                 INCW    io_cnt
0E2C D6 0E A3    20 5699                 CALL    Send_packet
0E2F AF          14 5700                 RET
0E30                5701                 
0E30                5702                 
0E30                5703                 

































        WIDGET.ASSEM            Page  89
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0E30                5704                 .PAGE
0E30                5705 ;---------------------------------------------------------------------------
0E30                5706 ;
0E30                5707 ;       LAP - Link Access Protocol level
0E30                5708 ;       Handles RTS, CTS, DATA, ACK type calls.
0E30                5709 ;
0E30                5710 ;----------------------------------------------------------------------------
0E30                5711 
0E30                5712 ;----------------------------------------------------------------------------
0E30                5713 ;
0E30                5714 ;               Get_packet -- Receives packets on the bus. Will return if
0E30                5715 ;               good data received or 2 second time out. Byte count also
0E30                5716 ;               returned.
0E30                5717 ;               routine needs:  pointer to rcv buffer (rcv_buff)
0E30                5718 ;                               destination node (our_node)
0E30                5719 ;                               source node (their_node)
0E30                5720 ;               routine returns:byte count (count)
0E30                5721 ;                               pointer (rcv_buff)
0E30                5722 ;               The carry flag returns results: carry=0  no errror
0E30                5723 ;                                               carry=1  error
0E30                5724 ;               The status bytes determine error type.
0E30                5725 ;
0E30                5726 ;----------------------------------------------------------------------------
0E30                5727 
0E30 56 42 97    10 5728 Get_packet:     AND     bus_stat1,#$FF-msg_rcvd-msg_sent-l_busy ;Clear bits
0E33 E4 4B 11    10 5729                 LD      rt_source,curr_node     ;Get source
0E36 E6 1A 84    10 5730                 LD      exp_ctrl,#RTScode       ;Allow rcv  of RTS packets
0E39 E4 4A 3E    10 5731                 LD      our_node,my_node        ;Set up node data
0E3C E4 4B 3D    10 5732                 LD      their_node,curr_node
0E3F E6 1C 27    10 5733                 LD      boff_hi,#.HIBYTE.twosec ;2 second time out
0E42 E6 1D 10    10 5734                 LD      boff_lo,#.LOWBYTE.twosec
0E45 E6 1E 17    10 5735                 LD      rt_pntr_hi,#.HIBYTE.dummy ;Set up receive pointer
0E48 E6 1F 77    10 5736                 LD      rt_pntr_lo,#.LOWBYTE.dummy
0E4B E6 F8 36    10 5737                 LD      P01m,#scc_P01m          ;Set up extended timing
0E4E                5738                 
0E4E D6 09 B7    20 5739                 CALL    Rpack                   ;Try to receive
0E51 76 42 20    10 5740                 TM      bus_stat1,#msg_rcvd     ;Check if received
0E54 6B 11          5741                 JR      z,Get_pak_out
0E56                5742                 
0E56 46 42 41    10 5743 Send_CTS:       OR      bus_stat1,#l_busy+lap_only  ;Set bits
0E59 56 42 DF    10 5744                 AND     bus_stat1,#$FF-msg_rcvd ;Clear bit
0E5C E6 3F 85    10 5745                 LD      lap_ctrl,#CTScode       ;Set up lap code
0E5F                5746                 
0E5F D6 08 C0    20 5747                 CALL    tpack                   ;Send the packet
0E62 76 42 08    10 5748                 TM      bus_stat1,#msg_sent     ;Check for sent message
0E65 EB 08          5749                 JR      nz,Get_DATA             ;Branch if no error
0E67                5750                 
0E67 E6 F8 16    10 5751 Get_pak_out:    LD      P01m,#wig_adrdata       ;Set up normal timing
0E6A D6 08 79    20 5752                 CALL    T1restore               ;Restore timer for widget
0E6D DF           6 5753                 SCF                             ;Flag error
0E6E AF          14 5754                 RET
0E6F                5755                 
0E6F E6 1A 10    10 5756 Get_DATA:       LD      exp_ctrl,#DATAcode      ;Allow DATA packets only
0E72 E4 46 1E    10 5757                 LD      rt_pntr_hi,io_buff_hi   ;Set up pointer to lap buffer





        WIDGET.ASSEM            Page  90
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0E75 E4 47 1F    10 5758                 LD      rt_pntr_lo,io_buff_lo
0E78 B0 1C        6 5759                 CLR     boff_hi                 ;Set 200 us time out
0E7A E6 1D 01    10 5760                 LD      boff_lo,#1
0E7D                5761                 
0E7D D6 09 B7    20 5762                 CALL    rpack                   ;Receive it
0E80 76 42 20    10 5763                 TM      bus_stat1,#msg_rcvd     ;Check for received message
0E83 6B E2          5764                 JR      z,Get_pak_out
0E85                5765                 
0E85 56 42 BF    10 5766 Get_done:       AND     bus_stat1,#$FF-l_busy   ;Close link level
0E88 46 42 80    10 5767                 OR      bus_stat1,#d_busy       ;Open ddp level
0E8B E4 1E 48    10 5768                 LD      io_cnt_hi,rt_pntr_hi    ;Load the ending pointer
0E8E E4 1F 49    10 5769                 LD      io_cnt_lo,rt_pntr_lo
0E91 24 46 48    10 5770                 SUB     io_cnt_hi,io_buff_hi    ;Calculate the byte count
0E94 34 47 49    10 5771                 SBC     io_cnt_lo,io_buff_lo
0E97 80 48       10 5772                 DECW    io_cnt                  ;Remove CRC
0E99 80 48       10 5773                 DECW    io_cnt
0E9B E6 F8 16    10 5774                 LD      P01m,#wig_adrdata       ;Set up normal timing
0E9E D6 08 79    20 5775                 CALL    T1restore
0EA1 CF           6 5776                 RCF                             ;Flag ok read
0EA2 AF          14 5777                 RET                             ;rcv_buff is already ready
0EA3                5778 
0EA3                5779 ;----------------------------------------------------------------------------
0EA3                5780 ;
0EA3                5781 ;               Send_packet -- Sends the data packet passed to it. This
0EA3                5782 ;               routine needs:  pointer to xmit buffer (xmt_buff)
0EA3                5783 ;                               byte count of buffer (count)
0EA3                5784 ;                               destination node (their_node)
0EA3                5785 ;                               source node (our_node)
0EA3                5786 ;               The carry flag returns results: carry=0  no errror
0EA3                5787 ;                                               carry=1  error
0EA3                5788 ;               The status bytes determine error type.
0EA3                5789 ;
0EA3                5790 ;----------------------------------------------------------------------------
0EA3                5791 
0EA3 CC 10        6 5792 Send_packet:    LD      !retry_cnt,#xmt_retries ;Get the retry count
0EA5                5793 
0EA5 D6 0C 52    20 5794 Send_again:     CALL    Rangen                  ;Get the backoff value
0EA8 E4 40 1D    10 5795                 LD      bofflo,seedhi           ;A random value
0EAB 54 4F 1D    10 5796                 AND     bofflo,boff_mask        ;Mask size
0EAE EB 02          5797                 JR      nz,Send_boff            ;Check for boff overflow
0EB0 20 1D        6 5798                 INC     bofflo
0EB2                5799 
0EB2 B0 1C        6 5800 Send_boff:      CLR     boffhi                  ;Clear it
0EB4 46 42 01    10 5801                 OR      bus_stat1,#lap_only     ;No data to send
0EB7 56 42 97    10 5802                 AND     bus_stat1,#$FF-msg_sent-msg_rcvd-l_busy   ;Clear bit
0EBA E4 4A 3E    10 5803                 LD      our_node,my_node
0EBD E4 4B 3D    10 5804                 LD      their_node,curr_node    ;Save source number
0EC0 E6 3F 84    10 5805                 LD      lap_ctrl,#RTScode       ;Set up lap code
0EC3 E6 1E 17    10 5806                 LD      rt_pntr_hi,#.HIBYTE.dummy ;Set up pointer to lap buffer
0EC6 E6 1F 77    10 5807                 LD      rt_pntr_lo,#.LOWBYTE.dummy
0EC9                5808                 
0EC9 E6 F8 36    10 5809                 LD      P01m,#scc_P01m          ;Set up extended timing
0ECC D6 08 C0    20 5810                 CALL    tpack                   ;Send the packet
0ECF 76 42 08    10 5811                 TM      bus_stat1,#msg_sent     ;Check for sent message





        WIDGET.ASSEM            Page  91
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0ED2 EB 0D          5812                 JR      nz,Get_CTS              ;Branch if no error
0ED4                5813                 
0ED4 76 44 98    10 5814                 TM      bus_stat3,#fatal        ;Check for fatal errors
0ED7 6B 5D          5815                 JR      z,Send_loop             ;Branch if non fatal
0ED9                5816                 
0ED9 E6 F8 16    10 5817                 LD      P01m,#wig_adrdata       ;Set up normal timing
0EDC D6 08 79    20 5818                 CALL    T1restore
0EDF DF           6 5819                 SCF                             ;Flag error
0EE0 AF          14 5820                 RET
0EE1                5821                 
0EE1 46 42 40    10 5822 Get_CTS:        OR      bus_stat1,#l_busy       ;Set l_busy true
0EE4                5823                 
0EE4 E4 3D 11    10 5824 Get_CTS2:       LD      rt_source,their_node    ;Set up exp node number
0EE7 E6 1A 85    10 5825                 LD      exp_ctrl,#CTScode       ;Set up lap code
0EEA B0 1C        6 5826                 CLR     boff_hi                 ;Set 200 us time out
0EEC E6 1D 01    10 5827                 LD      boff_lo,#1
0EEF                5828                 
0EEF D6 09 B7    20 5829                 CALL    rpack
0EF2 76 42 20    10 5830                 TM      bus_stat1,#msg_rcvd     ;Check for messege received
0EF5 EB 0D          5831                 JR      nz,Send_DATA
0EF7                5832                 
0EF7 76 44 98    10 5833                 TM      bus_stat3,#fatal        ;Check for fatal errors
0EFA 6B 3A          5834                 JR      z,Send_loop             ;Branch if non fatal
0EFC                5835                 
0EFC E6 F8 16    10 5836 Send_out:       LD      P01m,#wig_adrdata       ;Set up normal timing
0EFF D6 08 79    20 5837                 CALL    T1restore
0F02 DF           6 5838                 SCF                             ;Flag error
0F03 AF          14 5839                 RET
0F04                5840                 
0F04 56 42 F6    10 5841 Send_DATA:      AND     bus_stat1,#$FF-msg_sent-lap_only  ;Clear bit
0F07 E6 3F 10    10 5842                 LD      lap_ctrl,#DATAcode      ;Set up lap code
0F0A E4 46 1E    10 5843                 LD      rt_pntr_hi,io_buff_hi   ;Set up pointer to lap buffer
0F0D E4 47 1F    10 5844                 LD      rt_pntr_lo,io_buff_lo
0F10 E4 48 1A    10 5845                 LD      bytecnthi,io_cnt_hi     ;Set up byte count
0F13 E4 49 1B    10 5846                 LD      bytecntlo,io_cnt_lo
0F16                5847                 
0F16 D6 08 C0    20 5848                 CALL    tpack                   ;Send it
0F19                5849                 
0F19 CF           6 5850                 RCF                             ;Flag ok send (The RTS that is)
0F1A 10 4E        6 5851                 RLC     boff_hist               ;Save history
0F1C FB 03          5852                 JR      nc,Send2_DATA
0F1E                5853                 
0F1E D6 0C EE    20 5854                 CALL    Get_boff                ;Time to adjust boff mask
0F21                5855 
0F21 76 42 08    10 5856 Send2_DATA:     TM      bus_stat1,#msg_sent     ;Check for sent message
0F24 6B 0B          5857                 JR      z,Send3                 ;Branch if error
0F26                5858                 
0F26 56 42 BF    10 5859                 AND     bus_stat1,#$FF-l_busy   ;Close link level
0F29 E6 F8 16    10 5860                 LD      P01m,#wig_adrdata       ;Set up normal timing
0F2C D6 08 79    20 5861                 CALL    T1restore
0F2F CF           6 5862                 RCF                             ;Flag ok send
0F30 AF          14 5863                 RET
0F31                5864                 
0F31 76 44 98    10 5865 Send3:          TM      bus_stat3,#fatal        ;Check for fatal condition





        WIDGET.ASSEM            Page  92
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0F34 6B C6          5866                 JR      z,Send_out              ;Branch if true
0F36                5867                 
0F36 DF           6 5868 Send_loop:      SCF                             ;Flag no send
0F37 10 4E        6 5869                 RLC     boff_hist               ;Save history
0F39 FB 03          5870                 JR      nc,Send2_loop
0F3B D6 0C EE    20 5871                 CALL    Get_boff                ;Time to adjust boff mask
0F3E                5872 
0F3E CA 02          5873 Send2_loop:     DJNZ    !retry_cnt,Send_patch   ;Try again
0F40 8B BA          5874                 JR      Send_out
0F42                5875                 
0F42 8D 0E A5       5876 Send_patch:     JP      Send_again
0F45                5877                 
0F45                5878                 
0F45                5879                 .LSTOFF
0F45                5886                 .LSTON












































        WIDGET.ASSEM            Page  93
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


0F45                5887                 .Page
0F45                5888                 .FIN
0F45                5889                 
0F45                5890                 .ORG    $1000 ;move this code into the eprom
1000                5891                 
1000                5892                 .DO     SystemCode
1000 00 00          5893 DevSubType      .Equ    $00 ;system device
1000   --SKIP--     5894                 .ELSE
1000   --SKIP--     5895 DevSubType      .Equ    $01 ;diagnostic device
1000                5896                 .FIN
1000                5897                 
1000 00 00          5898                 .BLOCK  0,2   ;reserve two bytes for the checkbyte
1002 00             5899                 .DB     0     ;bank 0
1003 F0 78 3C 1E    5900 PassWord:       .DB     $F0, $78, $3C, $1E
1007                5901 
1007                5902                 .DO     W_10MB
1007 1F             5903 FmtDelay:       .DB     $1F     ;busy wait for a while
1008   --SKIP--     5904                 .ELSE
1008   --SKIP--     5905 FmtDelay:       .DB     $1F
1008                5906                 .FIN
1008                5907 
1008                5908                 .DO     W_10MB
1008 01 01          5909 RWI_Cylinder    .Equ    257     ;cylinder at which to turn on RWI and PC
1008                5910                 .FIN
1008   --SKIP--     5911                 .DO     W_20MB
1008   --SKIP--     5912 RWI_Cylinder    .Equ    257     ;cylinder at which to turn on RWI and PC
1008                5913                 .FIN
1008   --SKIP--     5914                 .DO     W_40MB
1008   --SKIP--     5915 RWI_Cylinder    .Equ    514     ;cylinder at which to turn on RWI and PC
1008                5916                 .FIN
1008 01 01          5917 RWI_Value:      .DB     .HIBYTE. RWI_Cylinder, .LOWBYTE. RWI_Cylinder
100A                5918                 
100A                5919 B0_VctTab:
100A 8D 11 9C       5920 Start_Vector:   Jp      Start_Command
100D 8D 05 46       5921 LL_Vector:      Jp      Load_Logical
1010 8D 05 1A       5922 LH_Vector:      Jp      Load_Header
1013 8D 12 CB       5923 RdL_Vector:     Jp      Rd_Leave
1016 8D 1E 6C       5924 CS_Vector:      Jp      ClrNormStat
1019                5925                  
1019 2C 24        6 5926 LdPw_Vector:     Ld     !r2,#.HIBYTE. Load_PassWord
101B 3C 51        6 5927                  Ld     !r3,#.LOWBYTE. Load_PassWord
101D D6 04 10    20 5928                 Call    Bank_Call
1020 AF          14 5929                 Ret
1021                5930                 
1021 2C 2D        6 5931 Free_Vector:     Ld     !r2,#.HIBYTE. Strt_FreeProcess
1023 3C 8A        6 5932                  Ld     !r3,#.LOWBYTE. Strt_FreeProcess
1025 D6 04 10    20 5933                 Call    Bank_Call
1028 AF          14 5934                 Ret
1029                5935                 
1029 2C 05        6 5936 ExtStk_Vector:   Ld     !r2,#.HIBYTE. Init_ExtStack
102B 3C D9        6 5937                  Ld     !r3,#.LOWBYTE. Init_ExtStack
102D D6 04 10    20 5938                 Call    Bank_Call
1030 AF          14 5939                 Ret
1031                5940                 





        WIDGET.ASSEM            Page  94
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1031 2C 20        6 5941 ZrRd_Vector:     Ld     !r2,#.HIBYTE. Zero_RdBuf
1033 3C B6        6 5942                  Ld     !r3,#.LOWBYTE. Zero_RdBuf
1035 D6 04 10    20 5943                 Call    Bank_Call
1038 AF          14 5944                 Ret
1039                5945 
1039 2C 05        6 5946 ClrStat_Vector:  Ld     !r2,#.HIBYTE. ClearStatus
103B 3C 76        6 5947                  Ld     !r3,#.LOWBYTE. ClearStatus
103D D6 04 10    20 5948                 Call    Bank_Call
1040 AF          14 5949                 Ret
1041                5950                 
1041 2C 29        6 5951 SlfTst_Vector:   Ld     !r2,#.HIBYTE. SelfTest
1043 3C 6A        6 5952                  Ld     !r3,#.LOWBYTE. SelfTest
1045 D6 04 10    20 5953                 Call   Bank_Call
1048 AF          14 5954                 Ret
1049                5955 
1049 2C 22        6 5956 SprTbl_Vector:   Ld     !r2,#.HIBYTE. Load_SprTbl
104B 3C 68        6 5957                  Ld     !r3,#.LOWBYTE. Load_SprTbl
104D D6 04 10    20 5958                 Call    Bank_Call
1050 AF          14 5959                 Ret
1051                5960 
1051 2C 2A        6 5961 LC_Vector:       Ld     !r2,#.HIBYTE. Load_Cache
1053 3C 89        6 5962                  Ld     !r3,#.LOWBYTE. Load_Cache
1055 D6 04 10    20 5963                 Call    Bank_Call
1058 AF          14 5964                 Ret
1059                5965                 
1059 2C 2C        6 5966 Scan_Vector:     Ld     !r2,#.HIBYTE. D_Scan
105B 3C 09        6 5967                  Ld     !r3,#.LOWBYTE. D_Scan
105D D6 04 10    20 5968                 Call    Bank_Call
1060 8D 12 CB       5969                 Jp      Rd_Leave
1063                5970 
1063                5971 IScan_Vector:
1063 0C 00        6 5972                 Ld      !r0,#DevSubType ;check for SystemCode
1065 42 00        6 5973                 Or      !r0,!r0 ;IF SystemCode THEN DevSubType = 0
1067 EB 1A          5974                 Jr      Nz,IScan_Ret
1069 76 24 10    10 5975                 Tm      Excpt_Stat,#PwrRst ;only do scan after power reset
106C 6B 07          5976                 Jr      Z,IScan_SprChk
106E 2C 2C        6 5977                  Ld     !r2,#.HIBYTE. Scan
1070 3C 12        6 5978                  Ld     !r3,#.LOWBYTE. Scan
1072 D6 04 10    20 5979                 Call    Bank_Call
1075 2C 24        6 5980 IScan_SprChk:    Ld     !r2,#.HIBYTE. Chk_SprCnt
1077 3C 96        6 5981                  Ld     !r3,#.LOWBYTE. Chk_SprCnt
1079 D6 04 10    20 5982                 Call    Bank_Call
107C 2C 29        6 5983                  Ld     !r2,#.HIBYTE. Set_SeekNeeded
107E 3C 56        6 5984                  Ld     !r3,#.LOWBYTE. Set_SeekNeeded
1080 D6 04 10    20 5985                 Call    Bank_Call
1083 AF          14 5986 IScan_Ret:      Ret
1084                5987                 
1084 D6 1D C9    20 5988 WrBlk_Vector:   Call   WriteBlock
1087 8D 04 5F       5989 VctrB0_Ret:     Jp      Bank_Ret
108A                5990                 
108A D6 1E B2    20 5991 RdBlk_Vector:   Call    ReadBlock
108D 8B F8          5992                 Jr      VctrB0_Ret
108F                5993                 
108F D6 16 6F    20 5994 SC_Vector:      Call    Srch_Cache





        WIDGET.ASSEM            Page  95
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1092 8B F3          5995                 Jr      VctrB0_Ret
1094                5996 
1094 2C 25        6 5997 Seek_Vector:     Ld     !r2,#.HIBYTE. Seek
1096 3C 50        6 5998                  Ld     !r3,#.LOWBYTE. Seek
1098 D6 04 10    20 5999                 Call    Bank_Call
109B 8D 04 5F       6000                 Jp      Bank_Ret
109E                6001 
109E 2C 05        6 6002 ExtPush_Vector:  Ld     !r2,#.HIBYTE. Ext_Push
10A0 3C E8        6 6003                  Ld     !r3,#.LOWBYTE. Ext_Push
10A2 D6 04 10    20 6004                 Call    Bank_Call
10A5 AF          14 6005                 Ret
10A6                6006 
10A6 2C 06        6 6007 ExtPop_Vector:   Ld     !r2,#.HIBYTE. Ext_Pop
10A8 3C 07        6 6008                  Ld     !r3,#.LOWBYTE. Ext_Pop
10AA D6 04 10    20 6009                 Call    Bank_Call
10AD AF          14 6010                 Ret
10AE                6011 
10AE                6012 DeviceParams:
10AE                6013                 .DO     W_10MB
10AE 57 69 64 67    6014                 .ASCII  'Widget-10    '
10BB 00 01 00       6015                 .DB     $00, $01, $0 + DevSubType
10BE 1A 14          6016                 .DB     HiRevNumber, LoRevNumber
10C0 00 4C 00       6017                 .DB     $00, $4C, $00
10C3 02 14          6018                 .DW     532 ;number of bytes per block
10C5 02 02          6019                 .DW     514 ;number of cylinders is 514
10C7 02             6020                 .DB     $02      ;number of heads is 2
10C8 13             6021                 .DB     NbrSctrs
10C9 00 00 4C       6022                 .DB     $00, $00, 76 ;number of spare possible
10CC                6023                 .LSTOFF
10CC                6026                 .LSTON
10CC                6027                 .FIN
10CC   --SKIP--     6028                 .DO     W_20MB
10CC   --SKIP--     6029                 .ASCII  'Widget-20    '
10CC   --SKIP--     6030                 .DB     $00, $01, $10 + DevSubType
10CC   --SKIP--     6031                 .DB     HiRevNumber, LoRevNumber
10CC   --SKIP--     6032                 .DB     $00, $98, $00
10CC   --SKIP--     6033                 .DW     532 ;number of bytes per block
10CC   --SKIP--     6034                 .DW     514 ;number of cylinders is 514
10CC   --SKIP--     6035                 .DB     $02      ;number of heads is 2
10CC   --SKIP--     6036                 .DB     NbrSctrs
10CC   --SKIP--     6037                 .DB     $00, $00, 76 ;number of spare possible
10CC   --SKIP--     6038                 .LSTOFF
10CC                6039                 .FIN
10CC                6040                 .DO     Internal
10CC                6041                 .LSTON
10CC                6042                 .FIN
10CC   --SKIP--     6043                 .DO     W_40MB
10CC   --SKIP--     6044                 .ASCII  'Widget-40    '
10CC   --SKIP--     6045                 .DB     $00, $01, $20 + DevSubType
10CC   --SKIP--     6046                 .DB     HiRevNumber, LoRevNumber
10CC   --SKIP--     6047                 .DB     $01, $30, $00
10CC   --SKIP--     6048                 .DW     532 ;number of bytes per block
10CC   --SKIP--     6049                 .DW     1028 ;number of cylinders is 1028
10CC   --SKIP--     6050                 .DB     $02      ;number of heads is 2





        WIDGET.ASSEM            Page  96
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


10CC   --SKIP--     6051                 .DB     NbrSctrs
10CC   --SKIP--     6052                 .DB     $00, $00, 76 ;number of spare possible
10CC   --SKIP--     6053                 .LSTOFF
10CC                6054                 .FIN
10CC                6055                 .DO     Internal
10CC                6056                 .LSTON
10CC                6057                 .FIN
10CC                6058                 
10CC 00 1E          6059 Dev_Parm_Len    .Equ    .PC. - DeviceParams
10CC                6060                 
10CC                6061                 .LSTOFF
10CC                6125                 .LSTON















































        WIDGET.ASSEM            Page  97
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


10CC                6126                 .Page
10CC                6127                 .FIN
10CC                6128                 
10CC                6129                 .DO     W_10MB
10CC 02 01 07 0A    6130 InterTable:     .DB     2, 1, 7, 10, 8, 13, 3
10D3   --SKIP--     6131                 .ELSE
10D3   --SKIP--     6132 InterTable:     .DB     2, 1, 26, 10, 8, 13, 22
10D3                6133                 .FIN
10D3                6134                 
10D3                6135 FormatTrack:
10D3 2C 20        6 6136                  Ld     !r2,#.HIBYTE. Zero_Fmt
10D5 3C B8        6 6137                  Ld     !r3,#.LOWBYTE. Zero_Fmt
10D7 D6 04 10    20 6138                 Call    Bank_Call
10DA 46 56 20    10 6139                 Or      DiskStat,#Wr_Op
10DD                6140                 
10DD 76 03 04    10 6141 FmtT_1:         Tm      Port3,#IndexMark    ;WHILE NOT( Index )
10E0 6B FB          6142                 Jr      Z,FmtT_1
10E2                6143                 
10E2 56 00 DF    10 6144                 And     Port0,#$FF-AcEraseL        ;turn on AC erase
10E5                6145                 
10E5 76 03 04    10 6146 FmtT_2:         Tm      Port3,#IndexMark    ;WHILE Index
10E8 EB FB          6147                 Jr      Nz,FmtT_2
10EA                6148                  
10EA 76 03 04    10 6149 FmtT_3:         Tm      Port3,#IndexMark    ;WHILE NOT( Index )
10ED 6B FB          6150                 Jr      Z,FmtT_3
10EF                6151                 
10EF 46 00 20    10 6152                 Or      Port0,#AcEraseL    ;turn off AC erase
10F2                6153                 
10F2 42 44        6 6154                 Or      !r4,!r4 ;test for 0 offset
10F4 6B 0A          6155                 Jr      Z,Fmt_Begin
10F6                6156                 
10F6 56 FA FB    10 6157 Fmt_Off1:       And     Irq,#$FF-Irq_Sector ;clear old sector mark
10F9                6158                 
10F9 76 FA 04    10 6159 Fmt_Off2:       Tm      Irq,#Irq_Sector ;wait for mark to pass
10FC 6B FB          6160                 Jr      Z,Fmt_Off2
10FE                6161                 
10FE 4A F6          6162                 Djnz    !r4,Fmt_Off1
1100                6163                 
1100 2C 10        6 6164 Fmt_Begin:      Ld      !r2,#.HIBYTE. InterTable
1102 3C CC        6 6165                 Ld      !r3,#.LOWBYTE. InterTable
1104 02 35        6 6166                 Add     !r3,!r5 ;get offset into table
1106 16 E2 00    10 6167                 Adc     !r2,#0
1109                6168                 
1109 C2 62       12 6169                 Ldc     !r6,@!!r2
110B B0 55        6 6170                 Clr     Sector ;sector := 0
110D                6171                 
110D 5C 13        6 6172                 Ld      !r5,#NbrSctrs
110F                6173                 
110F 1C 08        6 6174 FmtTrk_2:        Ld     !r1,#Dmt_FmtTrk
1111 D6 03 AB    20 6175                 Call    FormatBlock
1114 EB 05          6176                 Jr      Nz,FmtT_Until
1116                6177                 
1116 98 E0        6 6178                  Ld      !r9,!r0 ;pass reason for abort
1118 D6 04 80    20 6179                 Call    Abort





        WIDGET.ASSEM            Page  98
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


111B                6180                 
111B 04 E6 55    10 6181 FmtT_Until:     Add     Sector,!r6  ;Sector := Sector + InterLeaveFactor
111E A6 55 13    10 6182                 Cp      Sector,#NbrSctrs   ;Sector := Sector MOD NbrSctrs
1121 1B 03          6183                 Jr      Lt,FmtT2_Until
1123                6184                 
1123 26 55 13    10 6185                 Sub     Sector,#NbrSctrs   ;do MOD by subtraction
1126                6186                 
1126 5A E7          6187 FmtT2_Until:    Djnz    !r5,FmtTrk_2
1128                6188                 
1128 8D 04 5F       6189                 Jp      Bank_Ret
112B                6190                 
112B                6191                 .LSTOFF
112B                6232                 .LSTON














































        WIDGET.ASSEM            Page  99
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


112B                6233                 .Page
112B                6234                 .FIN
112B                6235 
112B                6236 LocateSector:
112B 0C 09        6 6237                  Ld     !r0,#Dmt_LctSctr
112D D6 03 93    20 6238                 Call    Set_Dmt
1130                6239                 
1130 70 FD          6240                 Push    Rp ;save context
1132 31 30        6 6241                 Srp     #Wrk_Sys2
1134                6242                 
1134 2C 14        6 6243                 Ld      !r2,#.HIBYTE. Fmt_Offset
1136 3C C3        6 6244                 Ld      !r3,#.LOWBYTE. Fmt_Offset
1138 82 42       12 6245                 Lde     !r4,@!!r2 ;load offset value
113A 44 54 54    10 6246                 Or      Head,Head ;check for even/odd head
113D 6B 02          6247                 Jr      Z,Lct_Offset
113F F0 E4        8 6248                 Swap    !r4
1141 56 E4 0F    10 6249 Lct_Offset:     And     !r4,#$0F
1144                6250                 
1144 A0 E2       10 6251                 Incw    !!r2 ;point to interleave value
1146 82 52       12 6252                 Lde     !r5,@!!r2
1148                6253                 
1148 2C 10        6 6254                 Ld      !r2,#.HIBYTE. InterTable
114A 3C CC        6 6255                 Ld      !r3,#.LOWBYTE. InterTable
114C 02 35        6 6256                 Add     !r3,!r5 ;add in interleave value
114E 16 E2 00    10 6257                 Adc     !r2,#0
1151 C2 52       12 6258                 Ldc     !r5,@!!r2 ;get real interleave value
1153                6259                 
1153 76 03 04    10 6260 LctSctr1:       Tm      Port3,#IndexMark ;WHILE Index DO BEGIN END
1156 EB FB          6261                 Jr      Nz,LctSctr1
1158                6262                 
1158 76 03 04    10 6263 LctSctr2:       Tm      Port3,#IndexMark ;WHILE Not( Index ) DO BEGIN END
115B 6B FB          6264                 Jr      Z,LctSctr2
115D                6265                 
115D 56 FA FB    10 6266                 And     Irq,#$FF-Irq_Sector ;clear any old sector marks
1160                6267                 
1160 42 44        6 6268                 Or      !r4,!r4 ;IF Offset = 0 THEN we're already here!
1162 6B 05          6269                 Jr      Z,LctSctr4
1164                6270                 
1164 28 E4        6 6271                  Ld     !r2,!r4
1166 D6 11 91    20 6272                 Call    LctSctr3
1169                6273                 
1169 44 55 55    10 6274 LctSctr4:       Or      Sector,Sector ;IF Sector = 0 THEN We're already there
116C 6B 1B          6275                 Jr      Z,LctDone
116E                6276                 
116E B0 E2        6 6277                 Clr     !r2
1170 B0 E4        6 6278                 Clr     !r4
1172                6279                 
1172 A4 55 E4    10 6280 LctSctr5:       Cp      !r4,Sector ;see if we've found the sector
1175 6B 0F          6281                 Jr      Z,LctSctr6
1177 06 E2 02    10 6282                 Add     !r2,#2
117A 02 45        6 6283                 Add     !r4,!r5 ;temp := Temp + InterLeave Factor
117C A6 E4 13    10 6284                 Cp      !r4,#NbrSctrs ;temp := temp MOD NbrSctrs
117F 1B F1          6285                 Jr      Lt,LctSctr5
1181 26 E4 13    10 6286                 Sub     !r4,#NbrSctrs





        WIDGET.ASSEM            Page 100
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1184 8B EC          6287                 Jr      LctSctr5
1186                6288                 
1186 D6 11 91    20 6289 LctSctr6:       Call    LctSctr3
1189                6290                 
1189 D6 03 9F    20 6291 LctDone:        Call    Clr_Dmt
118C 50 FD       10 6292                 Pop     Rp ;restore original context
118E 8D 04 5F       6293                 Jp      Bank_Ret
1191                6294 
1191 76 FA 04    10 6295 LctSctr3:       Tm      Irq,#Irq_Sector ;wait for next sector
1194 6B FB          6296                 Jr      Z,LctSctr3
1196 56 FA FB    10 6297                 And     Irq,#$FF-Irq_Sector ;mask old interrupt
1199 2A F6          6298                 Djnz    !r2,LctSctr3 ;count the number of sector in offset
119B AF          14 6299                 Ret
119C                6300                 
119C                6301                 .LSTOFF
119C                6364                 .LSTON











































        WIDGET.ASSEM            Page 101
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


119C                6365                 .Page
119C                6366                 .FIN
119C                6367 
119C                6368 Start_Command:
119C 31 10        6 6369                 Srp     #Wrk_Sys ;get into a reasonable state
119E B0 FE        6 6370                 Clr     Sph
11A0 E6 FF 80    10 6371                 Ld      Spl,#Stack_Top
11A3                6372                 
11A3 B0 23        6 6373                 Clr     Free_SlfTst
11A5                6374                 
11A5 D6 05 D9    20 6375                 Call    Init_ExtStack
11A8                6376                 
11A8 A6 5B 14    10 6377                 Cp      Cache_Index,#CacheLength
11AB 1B 02          6378                 Jr      Lt,St_Load_Cmnd
11AD                6379                 
11AD B0 5B        6 6380                 Clr     Cache_Index
11AF                6381                 
11AF 2C 10        6 6382 St_Load_Cmnd:    Ld     !r2,#.HIBYTE. Cmnd_Ptr
11B1 3C 1A        6 6383                  Ld     !r3,#.LOWBYTE. Cmnd_Ptr
11B3 EC 14        6 6384                  Ld     !rE,#.HIBYTE. CStatus4
11B5 FC A5        6 6385                  Ld     !rF,#.LOWBYTE. CStatus4
11B7 1C 09        6 6386                  Ld     !r1,#9 ;move 9 bytes
11B9 82 02       12 6387 St_L_Lp:        Lde     !r0,@!!r2
11BB 92 0E       12 6388                 Lde     @!!rE,!r0
11BD A0 E2       10 6389                 Incw    !!r2
11BF A0 EE       10 6390                 Incw    !!rE
11C1 1A F6          6391                 Djnz    !r1,St_L_Lp
11C3                6392                 
11C3 D6 06 58    20 6393                 Call    ZeroHeader
11C6                6394 
11C6 EC 14        6 6395 Strt_ZH:        Ld      !rE,#.HIBYTE. CStatus4
11C8 FC A5        6 6396                 Ld      !rF,#.LOWBYTE. CStatus4
11CA 82 4E       12 6397                 Lde     !r4,@!!rE
11CC                6398                 
11CC 68 E4        6 6399                 Ld      !r6,!r4
11CE 56 E6 F0    10 6400                 And     !r6,#CmndType
11D1 A6 E6 F0    10 6401                 Cp      !r6,#$F0 ;check for 'free bus command'
11D4 EB 07          6402                 Jr      Nz,Strt_ChkDiag
11D6                6403                 
11D6 2C 2D        6 6404                  Ld     !r2,#.HIBYTE. Strt_FreeProcess
11D8 3C 8A        6 6405                  Ld     !r3,#.LOWBYTE. Strt_FreeProcess
11DA D6 04 10    20 6406                 Call    Bank_Call
11DD                6407 
11DD A6 E6 10    10 6408 Strt_ChkDiag:   Cp      !r6,#$10 ;check for diagnostic command
11E0 EB 0A          6409                 Jr      Nz,Strt_Swap
11E2                6410                 
11E2 2C 29        6 6411                  Ld     !r2,#.HIBYTE. Set_SeekNeeded
11E4 3C 56        6 6412                  Ld     !r3,#.LOWBYTE. Set_SeekNeeded
11E6 D6 04 10    20 6413                 Call    Bank_Call
11E9                6414                 
11E9 E6 57 90    10 6415                 Ld      Seek_Type,#Access_Offset
11EC F0 E6        8 6416 Strt_Swap:      Swap    !r6                     ;r6 := CommandType
11EE 6B 15          6417                 Jr      Z,Chk_Inst             ;jump if no check byte in string
11F0                6418                 





        WIDGET.ASSEM            Page 102
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


11F0 88 E4        6 6419                 Ld      !r8,!r4
11F2 56 E8 0F    10 6420                 And     !r8,#$0F ;get length of command string
11F5 A0 EE       10 6421                 Incw    !!rE ;get opcode
11F7 82 4E       12 6422                 Lde     !r4,@!!rE
11F9 EC 14        6 6423                  Ld     !rE,#.HIBYTE. CStatus4
11FB FC A5        6 6424                  Ld     !rF,#.LOWBYTE. CStatus4
11FD D6 05 56    20 6425                 Call    Chk_Chk_Byte
1200 6B 03          6426                 Jr      Z,Chk_Inst
1202                6427                 
1202 D6 04 80    20 6428                 Call    Abort
1205                6429                 
1205 A6 E6 02    10 6430 Chk_Inst:       Cp      !r6,#Max_Cmnd_Types     ;check for illegal type
1208 AB 1E          6431                 Jr      Gt,Inst_Abort
120A                6432 
120A 44 25 25    10 6433                 Or      SlfTst_Result,SlfTst_Result ;check if we're not healthy
120D 6B 08          6434                 Jr      Z,Chk_Limits
120F                6435                 
120F A6 E6 01    10 6436                 Cp      !r6,#01 ;only allow diagnostic commands
1212 6B 03          6437                 Jr      Z,Chk_Limits
1214                6438                 
1214 D6 04 80    20 6439                 Call    Abort
1217                6440                 
1217 EC 12        6 6441 Chk_Limits:     Ld      !rE,#.HIBYTE. Cmnd_Limits
1219 FC 4B        6 6442                 Ld      !rF,#.LOWBYTE. Cmnd_Limits
121B 02 F6        6 6443                 Add     !rF,!r6                 ;get offset into table
121D 16 EE 00    10 6444                 Adc     !rE,#0
1220 C2 0E       12 6445                 Ldc     !r0,@!!rE               ;get limit
1222 18 E4        6 6446                 Ld      !r1,!r4                 ;get instruction
1224 A2 10        6 6447                 Cp      !r1,!r0
1226 2B 03          6448                 Jr      Le,Ok_Inst              ;jump if legal instruction
1228                6449 
1228 D6 04 80    20 6450 Inst_Abort:     Call    Abort
122B                6451                 
122B EC 12        6 6452 Ok_Inst:        Ld      !rE,#.HIBYTE. Cmnd_Ptrs
122D FC 4E        6 6453                 Ld      !rF,#.LOWBYTE. Cmnd_Ptrs
122F 90 E6        6 6454                 Rl      !r6
1231 02 F6        6 6455                 Add     !rF,!r6                 ;get offset into table
1233 16 EE 00    10 6456                 Adc     !rE,#0
1236 C2 CE       12 6457                 Ldc     !rC,@!!rE               ;get inst routine ptr
1238 A0 EE       10 6458                 Incw    !!rE
123A C2 DE       12 6459                 Ldc     !rD,@!!rE
123C 90 E1        6 6460                 Rl      !r1
123E 02 D1        6 6461                 Add     !rD,!r1                 ;get offset into table
1240 16 EC 00    10 6462                 Adc     !rC,#0
1243 C2 EC       12 6463                 Ldc     !rE,@!!rC               ;get address to routine
1245 A0 EC       10 6464                 Incw    !!rC
1247 C2 FC       12 6465                 Ldc     !rF,@!!rC
1249 30 EE        8 6466                 Jp      @!rE                    ;jump to routine
124B                6467 










        WIDGET.ASSEM            Page 103
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


124B                6468                 .Page
124B                6469 
124B                6470 ;>>>>>>>>>>>>>>>>>>>>>>>>
124B                6471 ;>
124B                6472 ;>      Command Routine Tables
124B                6473 ;>
124B                6474 ;>>>>>>>>>>>>>>>>>>>>>>>>
124B                6475 
124B 02             6476 Cmnd_Limits:    .DB     Pro_Cmnds
124C 13             6477                 .DB     Diag_Cmnds
124D 02             6478                 .DB     Sys_Cmnds
124E                6479 
124E 12 54          6480 Cmnd_Ptrs:      .DW     Pro_Inst
1250 12 5A          6481                 .DW     Diag_Inst
1252 12 82          6482                 .DW     Sys_Inst
1254                6483 
1254 12 88          6484 Pro_Inst:       .DW     Pro_Read
1256 18 8B          6485                 .DW     Pro_Write
1258 19 53          6486                 .DW     Pro_WrVer
125A                6487                 
125A 18 29          6488 Diag_Inst:      .DW     D_Read_ID               ;cmnd 0
125C 1A 38          6489                 .DW     Read_CStatus            ;cmnd 1
125E 1A C4          6490                 .DW     Read_SStatus            ;cmnd 2
1260 1B 08          6491                 .DW     Send_ServoCmnd          ;cmnd 3
1262 1B 33          6492                 .DW     Send_Seek               ;cmnd 4
1264 1B 57          6493                 .DW     Send_Restore            ;cmnd 5
1266 1B 7A          6494                 .DW     Set_Recovery            ;cmnd 6
1268 00 0C          6495                 .DW     $000C ;Soft_Reset       ;cmnd 7
126A 1B 93          6496                 .DW     Send_Park               ;cmnd 8
126C 19 AA          6497                 .DW     D_Read                  ;cmnd 9
126E 19 C6          6498                 .DW     D_ReadHdr               ;cmnd A
1270 1A 1C          6499                 .DW     D_Write                 ;cmnd B
1272 1B A6          6500                 .DW     Set_AutoOffset          ;cmnd C
1274 18 78          6501                 .DW     D_Read_SprTbl           ;cmnd D
1276 1B B9          6502                 .DW     Wr_SprTbl               ;cmnd E  + password
1278 1B E5          6503                 .DW     Format                  ;cmnd F  + password
127A 1C 59          6504                 .DW     D_InitSprTbl            ;cmnd 10 + password
127C 1C 26          6505                 .DW     Read_Abort              ;cmnd 11
127E 1C 46          6506                 .DW     D_RstSrvo               ;cmnd 12
1280 10 59          6507                 .DW     Scan_Vector             ;cmnd 13
1282                6508                 
1282 1C 85          6509 Sys_Inst:       .DW     Sys_Read
1284 1D 59          6510                 .DW     Sys_Write
1286 19 4E          6511                 .DW     Sys_WrV
1288                6512 
1288                6513                 .LSTOFF
1288                6559                 .LSTON












        WIDGET.ASSEM            Page 104
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1288                6560                 .Page
1288                6561                 .FIN
1288                6562 
1288                6563 Pro_Read:
1288 E6 0A 02    10 6564                  Ld     Wrk_Io+$A,#Read_Response
128B D6 02 8B    20 6565                 Call    Ack_Read
128E                6566                 
128E D6 1E 6C    20 6567                 Call    ClrNormStat
1291                6568                 
1291 0C 01        6 6569                  Ld     !r0,#Pro_Log_Offset
1293 D6 05 87    20 6570                 Call    Ld_LgclBlk;LogicalBlockNumber := ...
1296                6571                 
1296 8C 00        6 6572                  Ld     !r8,#Profile
1298 2C 21        6 6573                  Ld     !r2,#.HIBYTE. Get_Type
129A 3C 9B        6 6574                  Ld     !r3,#.LOWBYTE. Get_Type
129C D6 04 10    20 6575                 Call    Bank_Call
129F                6576                 
129F A6 E8 08    10 6577                 Cp      !r8,#SprTbl_Type
12A2 6D 18 81       6578                 Jp      Z,Read_SprTbl
12A5 A6 E8 04    10 6579                 Cp      !r8,#ID_Type
12A8 6D 18 32       6580                 Jp      Z,Read_ID
12AB                6581                 
12AB E6 57 80    10 6582                 Ld      Seek_Type,#Access
12AE E6 58 02    10 6583                 Ld      Data_Type,#User_Type
12B1 56 56 D7    10 6584                 And     DiskStat,#$FF-Wr_Op-Seq_CachSrch
12B4                6585                 
12B4 2C 1F        6 6586                  Ld     !r2,#.HIBYTE. OverLap
12B6 3C 92        6 6587                  Ld     !r3,#.LOWBYTE. OverLap
12B8 D6 04 10    20 6588                 Call    Bank_Call
12BB                6589                 
12BB D6 13 03    20 6590                 Call    Read_Common
12BE 6B 08          6591 Pro_Rd_Exit:    Jr      Z,ProRd_Err
12C0                6592                 
12C0 76 5A 02    10 6593                 Tm      BlkStat,#B_Block ;check if block read was a bad block
12C3 6B 06          6594                 Jr      Z,Rd_Leave
12C5                6595                 
12C5 D6 12 DC    20 6596                 Call    Pro_Rd_BB
12C8 D6 16 C2    20 6597 ProRd_Err:      Call    Data_Ex_Handler
12CB                6598                 
12CB E6 0A 01    10 6599 Rd_Leave:       Ld      Wrk_Io+$A,#Init_Response
12CE B0 0B        6 6600                 Clr     Wrk_Io+$B ;Cmnd_Pending, IBsy := False
12D0                6601                 
12D0 D6 12 E7    20 6602 Rd_Leave2:      Call    Ld_Stand_Stat
12D3                6603 
12D3 E6 0C 10    10 6604 Rd_Leave1:       Ld     Wrk_Io+$C,#.HIBYTE. StatusArray
12D6 E6 0D 12    10 6605                  Ld     Wrk_Io+$D,#.LOWBYTE. StatusArray
12D9 8D 02 66       6606                 Jp      Clr_Bsy
12DC                6607 
12DC 2C 20        6 6608 Pro_Rd_BB:       Ld     !r2,#.HIBYTE. RBuf_To_Buf2
12DE 3C 99        6 6609                  Ld     !r3,#.LOWBYTE. RBuf_To_Buf2
12E0 D6 04 10    20 6610                 Call    Bank_Call
12E3 D6 13 52    20 6611                 Call    Rd_SprBlock
12E6 AF          14 6612                 Ret
12E7                6613                 





        WIDGET.ASSEM            Page 105
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


12E7                6614                 
12E7                6615 ;****************
12E7 2C 14        6 6616 Ld_Stand_Stat:   Ld     !r2,#.HIBYTE. CStatus0
12E9 3C 95        6 6617                  Ld     !r3,#.LOWBYTE. CStatus0
12EB EC 10        6 6618                  Ld     !rE,#.HIBYTE. StatusArray
12ED FC 12        6 6619                  Ld     !rF,#.LOWBYTE. StatusArray
12EF D6 1E A3    20 6620                 Call    Move4_B0
12F2                6621                  
12F2 2C 14        6 6622                  Ld     !r2,#.HIBYTE. LogicalBlock ;send LB after status
12F4 3C A1        6 6623                  Ld     !r3,#.LOWBYTE. LogicalBlock
12F6 1C 03        6 6624                  Ld     !r1,#3 ;use implied LogicalBlock from last operation
12F8 82 02       12 6625 Ld_St_St_Lp:     Lde    !r0,@!!r2
12FA 92 0E       12 6626                  Lde    @!!rE,!r0
12FC A0 E2       10 6627                  Incw   !!r2
12FE A0 EE       10 6628                  Incw   !!rE
1300 1A F6          6629                  Djnz   !r1,Ld_St_St_Lp
1302 AF          14 6630                 Ret
1303                6631                 
1303                6632                 .LSTOFF
1303                6703                 .LSTON







































        WIDGET.ASSEM            Page 106
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1303                6704                 .Page
1303                6705                 .FIN
1303                6706 
1303                6707 Read_Common:
1303 56 56 DF    10 6708                 And     DiskStat,#$FF-Wr_Op
1306 B0 E4        6 6709                 Clr     !r4
1308 D6 1E B2    20 6710                 Call    ReadBlock
130B EB 4F          6711                 Jr      Nz,Rd_Cmn_End
130D                6712                 
130D 4C 80        6 6713                 Ld      !r4,#RdError ;ErrorCode := Error, Undetermined
130F                6714                 
130F 76 24 80    10 6715                 Tm      Excpt_Stat,#Recovery ;IF Recovery THEN ...
1312 6B 48          6716                 Jr      Z,Rd_Cmn_End
1314                6717                 
1314 5C 04        6 6718                 Ld      !r5,#4  ;Retry := 4
1316                6719                 
1316 76 26 50    10 6720 Rd_Cmn_Lp:      Tm      RdStat,#RdSrvoErr + RdNoHdrFnd
1319 6B 28          6721                 Jr      Z,Rd_Cmn_Crct
131B                6722                 
131B 2C 28        6 6723                  Ld     !r2,#.HIBYTE. SrvoRcvry
131D 3C 9C        6 6724                  Ld     !r3,#.LOWBYTE. SrvoRcvry
131F D6 04 10    20 6725                 Call    Bank_Call
1322                6726                 
1322 D6 1E B2    20 6727                 Call    ReadBlock
1325 B0 E4        6 6728                 Clr     !r4
1327 EB 33          6729                 Jr      Nz,Rd_Cmn_End
1329                6730                 
1329 5A EB          6731                 Djnz    !r5,Rd_Cmn_Lp
132B                6732                 
132B 76 26 40    10 6733 Rd_Cmn_Servo:   Tm      RdStat,#RdSrvoErr
132E 6B 0A          6734                 Jr      Z,Rd_Cmn_Hdr
1330                6735                 
1330 B0 E0        6 6736                  Clr    !r0 ;Byte 0
1332 1C 02        6 6737                  Ld     !r1,#Stat_Srvo
1334 D6 03 83    20 6738                 Call    SetStatus
1337 D6 04 80    20 6739                 Call    Abort
133A                6740                 
133A 76 26 10    10 6741 Rd_Cmn_Hdr:     Tm      RdStat,#RdNoHdrFnd
133D 6B 04          6742                 Jr      Z,Rd_Cmn_Crct
133F                6743                 
133F 4C 88        6 6744                 Ld      !r4,#Error+Ex_HdrBad
1341 8B 19          6745                 Jr      Rd_Cmn_End
1343                6746                  
1343 08 27        6 6747 Rd_Cmn_Crct:    Ld      !r0,RdErrCnt
1345 56 E0 0F    10 6748                 And     !r0,#$0F ;mask off unwanted status
1348 A6 E0 03    10 6749                 Cp      !r0,#SprThresh
134B 2B 09          6750                 Jr      Le,Rd_Cmn_RdErr
134D A6 E0 0A    10 6751                 Cp      !r0,#10
1350 6B 08          6752                 Jr      Z,Rd_BadBlock
1352                6753                 
1352 4C 82        6 6754 Rd_SprBlock:    Ld      !r4,#Error+Ex_SprBlock
1354 8B 06          6755                 Jr      Rd_Cmn_End
1356                6756                 
1356 4C 86        6 6757 Rd_Cmn_RdErr:   Ld      !r4,#Error+Ex_ReadErr





        WIDGET.ASSEM            Page 107
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1358 8B 02          6758                 Jr      Rd_Cmn_End
135A                6759                 
135A 4C 84        6 6760 Rd_BadBlock:    Ld      !r4,#Error+Ex_BadBlock
135C                6761                 
135C 08 E4        6 6762 Rd_Cmn_End:     Ld      !r0,!r4
135E 66 E0 80    10 6763                 Tcm     !r0,#RdError
1361 8D 04 5F       6764                 Jp      Bank_Ret
1364                6765                 
1364                6766                 .LSTOFF
1364                6828                 .LSTON

















































        WIDGET.ASSEM            Page 108
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1364                6829                 .Page
1364                6830                 .FIN
1364                6831 
1364                6832 SprBlock:
1364 76 EA 10    10 6833                 Tm      !rA,#Spare ;IF SpareType = Spare
1367 6B 44          6834                 Jr      Z,SprBlk_1
1369                6835                 
1369 D6 18 23    20 6836                 Call    Get_Spr_Code
136C A6 E0 02    10 6837                 Cp      !r0,#B_Block
136F EB 0C          6838                 Jr      Nz,SprBlk_2
1371                6839                 
1371 D6 15 BC    20 6840                 Call    DeleteSpare
1374 0C 02        6 6841                  Ld     !r0,#Dec_BadCnt
1376 2C 24        6 6842                  Ld     !r2,#.HIBYTE. SpareCount
1378 3C 64        6 6843                  Ld     !r3,#.LOWBYTE. SpareCount
137A D6 04 10    20 6844                 Call    Bank_Call
137D                6845                 
137D D6 05 03    20 6846 SprBlk_2:       Call    ReSeek
1380 4C 0A        6 6847                 Ld      !r4,#10 ;bang on this block for a while
1382 5C 00        6 6848                 Ld      !r5,#0 ;init error count
1384                6849 
1384 2C 20        6 6850 Spr_WrVer:       Ld     !r2,#.HIBYTE. Buf2_To_WrBuf
1386 3C 70        6 6851                  Ld     !r3,#.LOWBYTE. Buf2_To_WrBuf
1388 D6 04 10    20 6852                 Call    Bank_Call
138B                6853 
138B E6 27 0A    10 6854                  Ld     RdErrCnt,#10 ;assume failure
138E D6 19 75    20 6855                 Call    WrVer_Common
1391 EB 13          6856                 Jr      Nz,SprWrV_1
1393                6857                 
1393 44 28 28    10 6858                 Or      WrStat,WrStat ;check for write error
1396 EB 15          6859                 Jr      Nz,SprBlk_1
1398                6860                 
1398 08 27        6 6861                 Ld      !r0,RdErrCnt
139A 56 E0 0F    10 6862                 And     !r0,#$0F ;mask off status info
139D 6B 0E          6863                 Jr      Z,SprBlk_1  ;check for header failure
139F                6864                 
139F A6 E0 03    10 6865                 Cp      !r0,#SprThresh
13A2 AB 09          6866                 Jr      Gt,SprBlk_1 ;spare the block if over threshold
13A4                6867                 
13A4 02 50        6 6868                 Add     !r5,!r0 ;bump cumulative error count
13A6 4A DC          6869 SprWrV_1:       Djnz    !r4,Spr_WrVer
13A8                6870                 
13A8 A6 E5 03    10 6871                 Cp      !r5,#SprThresh ;take a percentage of total reads
13AB 2B 03          6872                 Jr      Le,SprBlk_3
13AD                6873                 
13AD D6 13 BF    20 6874 SprBlk_1:       Call    SpareBlock
13B0                6875                 
13B0 2C 23        6 6876 SprBlk_3:        Ld     !r2,#.HIBYTE. UpDate_SprTbl
13B2 3C 8A        6 6877                  Ld     !r3,#.LOWBYTE. UpDate_SprTbl
13B4 D6 04 10    20 6878                 Call    Bank_Call
13B7 2C 20        6 6879                  Ld     !r2,#.HIBYTE. Buf2_To_RBuf
13B9 3C 5B        6 6880                  Ld     !r3,#.LOWBYTE. Buf2_To_RBuf
13BB D6 04 10    20 6881                 Call    Bank_Call
13BE                6882 





        WIDGET.ASSEM            Page 109
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


13BE AF          14 6883 SprBlk_Ret:     Ret
13BF                6884                 
13BF                6885                 .LSTOFF
13BF                6932                 .LSTON























































        WIDGET.ASSEM            Page 110
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


13BF                6933                 .Page
13BF                6934                 .FIN
13BF                6935                 
13BF                6936 SpareBlock:
13BF 0C 01        6 6937                  Ld     !r0,#1 ;byte 1
13C1 1C 04        6 6938                  Ld     !r1,#Stat_Spare
13C3 D6 03 83    20 6939                 Call    SetStatus
13C6                6940                 
13C6 76 EA 10    10 6941                 Tm      !rA,#Spare
13C9 EB 20          6942                 Jr      Nz,S_Blk_Rpt
13CB                6943                 
13CB D6 18 23    20 6944                 Call    Get_Spr_Code
13CE A6 E0 02    10 6945                 Cp      !r0,#B_Block
13D1 6B 25          6946                 Jr      Z,S_Blk_End
13D3                6947                 
13D3 D6 05 46    20 6948                 Call    Load_Logical
13D6 D6 15 0C    20 6949                 Call    GetNewSpare
13D9 F8 E0        6 6950                  Ld     !rF,!r0
13DB 8C 00        6 6951                  Ld     !r8,#BadBlock
13DD D6 15 79    20 6952                 Call    AddSpare
13E0 0C 01        6 6953                  Ld     !r0,#Inc_BadCnt
13E2 2C 24        6 6954                  Ld     !r2,#.HIBYTE. SpareCount
13E4 3C 64        6 6955                  Ld     !r3,#.LOWBYTE. SpareCount
13E6 D6 04 10    20 6956                 Call    Bank_Call
13E9 8B 0D          6957                 Jr      S_Blk_End
13EB                6958                 
13EB D6 05 46    20 6959 S_Blk_Rpt:      Call    Load_Logical
13EE D6 13 FB    20 6960                 Call    Spr_Enter
13F1 EB 05          6961                 Jr      Nz,S_Blk_End
13F3                6962                 
13F3 A6 E0 86    10 6963                 Cp      !r0,#Error+Ex_ReadErr ;check for sparing threshold
13F6 EB F3          6964                 Jr      Nz,S_Blk_Rpt
13F8                6965                 
13F8 8D 04 5F       6966 S_Blk_End:      Jp      Bank_Ret
13FB                6967 
























        WIDGET.ASSEM            Page 111
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


13FB                6968                 .Page
13FB                6969 
13FB D6 18 23    20 6970 Spr_Enter:      Call    Get_Spr_Code
13FE A6 E0 01    10 6971                  Cp     !r0,#S_Block
1401 EB 22          6972                 Jr      Nz,S_Blk_New
1403                6973                 
1403 D6 10 9E    20 6974                 Call    ExtPush_Vector
1406 D6 14 7F    20 6975                 Call    SrchSpTabl
1409 70 E1          6976                  Push   !r1             ;save possible ptr to element
140B 70 FC          6977                  Push   Flags
140D D6 10 A6    20 6978                  Call   ExtPop_Vector
1410 50 FC       10 6979                  Pop    Flags
1412 50 E1       10 6980                  Pop    !r1
1414 EB 03          6981                 Jr      Nz,S_Blk_Unuse
1416                6982                 
1416 D6 04 80    20 6983                 Call    Abort
1419                6984                 
1419 08 E1        6 6985 S_Blk_Unuse:     Ld     !r0,!r1
141B D6 18 09    20 6986                 Call    Get_Ptr
141E 82 02       12 6987                 Lde     !r0,@!!r2 ;Element.Useable := False
1420 56 E0 DF    10 6988                 And     !r0,#$FF-Useable
1423 92 02       12 6989                 Lde     @!!r2,!r0
1425                6990 
1425 0C 00        6 6991 S_Blk_New:       Ld     !r0,#Inc_SprCnt
1427 2C 24        6 6992                  Ld     !r2,#.HIBYTE. SpareCount
1429 3C 64        6 6993                  Ld     !r3,#.LOWBYTE. SpareCount
142B D6 04 10    20 6994                 Call    Bank_Call
142E                6995                 
142E 56 5A FC    10 6996                 And     BlkStat,#$FC ;mask out the SpareCode stuff
1431 46 5A 01    10 6997                 Or      BlkStat,#S_Block
1434                6998                 
1434 D6 15 0C    20 6999                 Call    GetNewSpare
1437 F8 E0        6 7000                  Ld     !rF,!r0
1439 8C 10        6 7001                  Ld     !r8,#Spare
143B D6 15 79    20 7002                 Call    AddSpare
143E                7003                 
143E E6 57 90    10 7004                 Ld      Seek_Type,#Access_Offset
1441                7005                  
1441 08 EF        6 7006                  Ld     !r0,!rF ;get Location back
1443 0E           6 7007                  Inc    !r0 ;count 1..76
1444 2C 25        6 7008                  Ld     !r2,#.HIBYTE. MulR0_m
1446 3C 18        6 7009                  Ld     !r3,#.LOWBYTE. MulR0_m
1448 D6 04 10    20 7010                 Call    Bank_Call
144B 2C 20        6 7011                  Ld     !r2,#.HIBYTE. Get_Cyl_H_S
144D 3C D4        6 7012                  Ld     !r3,#.LOWBYTE. Get_Cyl_H_S
144F D6 04 10    20 7013                 Call    Bank_Call
1452 08 EF        6 7014                  Ld     !r0,!rF
1454 2C 25        6 7015                  Ld     !r2,#.HIBYTE. ReMap_Sector
1456 3C 3A        6 7016                  Ld     !r3,#.LOWBYTE. ReMap_Sector
1458 D6 04 10    20 7017                 Call    Bank_Call
145B F8 E0        6 7018                  Ld     !rF,!r0
145D D6 10 94    20 7019                 Call    Seek_Vector
1460                7020                 
1460 A6 58 02    10 7021                 Cp      DataType,#User_type





        WIDGET.ASSEM            Page 112
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1463 6B 0D          7022                 Jr      Z,Spr_LdBuf2
1465                7023                 
1465 2C 23        6 7024                  Ld     !r2,#.HIBYTE. SprChkSum ;calculate new checkbyte
1467 3C 2E        6 7025                  Ld     !r3,#.LOWBYTE. SprChkSum
1469 D6 04 10    20 7026                 Call    Bank_Call
146C 2C 20        6 7027                  Ld     !r2,#.HIBYTE. Spr_To_WrBuf
146E 3C AC        6 7028                  Ld     !r3,#.LOWBYTE. Spr_To_WrBuf
1470 8B 04          7029                 Jr      Spr_LdWrBuf
1472                7030                 
1472 2C 20        6 7031 Spr_LdBuf2:      Ld     !r2,#.HIBYTE. Buf2_To_WrBuf
1474 3C 70        6 7032                  Ld     !r3,#.LOWBYTE. Buf2_To_WrBuf
1476 D6 04 10    20 7033 Spr_LdWrBuf:    Call    Bank_Call
1479                7034                 
1479 D6 19 75    20 7035                 Call    WrVer_Common
147C 8D 04 5F       7036                 Jp      Bank_Ret
147F                7037                 
147F                7038                 .LSTOFF
147F                7135                 .LSTON









































        WIDGET.ASSEM            Page 113
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


147F                7136                 .Page
147F                7137                 .FIN
147F                7138                 
147F                7139 SrchSpTabl:
147F D6 17 97    20 7140                 Call    Get_HeadPtr
1482 6B 5F          7141                 Jr      Z,NotInTabl
1484                7142                 
1484 B0 E7        6 7143                 Clr     !r7             ;Found := False
1486                7144                 
1486 09 41        6 7145 SrchLp:         Ld      ScrReg1,!r0     ;save current ptr
1488 D6 18 09    20 7146                 Call    Get_Ptr
148B                7147                 
148B 82 12       12 7148                 Lde     !r1,@!!r2       ;get element status
148D 19 40        6 7149                 Ld      ScrReg0,!r1     ;save element.status
148F 76 E1 40    10 7150                 Tm      !r1,#Used       ;IF Used
1492 6B 3B          7151                 Jr      Z,SrchLpElse
1494 76 E1 20    10 7152                 Tm      !r1,#Useable    ;  AND Useable
1497 6B 36          7153                 Jr      Z,SrchLpElse
1499 08 58        6 7154                 Ld      !r0,Data_Type
149B 72 10        6 7155                 Tm      !r1,!r0         ;AND Type is correct
149D 6B 30          7156                 Jr      Z,SrchLpElse
149F                7157 ;                                             AND ( Token =
149F A0 E2       10 7158                 Incw    !!r2
14A1 82 12       12 7159                 Lde     !r1,@!!r2
14A3 56 E1 03    10 7160                 And     !r1,#$03         ;         LogicalBlockNumber/bits 0:9 )
14A6 08 ED        6 7161                 Ld      !r0,!rD
14A8 56 E0 03    10 7162                 And     !r0,#03
14AB A2 01        6 7163                 Cp      !r0,!r1
14AD EB 20          7164                 Jr      Nz,SrchLpElse
14AF A0 E2       10 7165                 Incw    !!r2            ;point to bits 0:7 of token
14B1 82 02       12 7166                 Lde     !r0,@!!r2
14B3 A2 0E        6 7167                 Cp      !r0,!rE
14B5 EB 18          7168                 Jr      Nz,SrchLpElse
14B7                7169                 
14B7 76 40 10    10 7170                 Tm      ScrReg0,#Spare ;check if BadBlock
14BA EB 05          7171                 Jr      Nz,Srch_Spare
14BC                7172                 
14BC 46 E7 01    10 7173                 Or      !r7,#Found
14BF 8B 24          7174                 Jr      Srch_Sp1
14C1                7175                 
14C1 08 41        6 7176 Srch_Spare:      Ld     !r0,ScrReg1
14C3 0E           6 7177                  Inc    !r0 ;number spare blocks 1..76
14C4                7178 
14C4                7179 ;****** INLINE: MulR0_m *****
14C4 B0 EE        6 7180                 Clr     !rE     ;Result := !r0 * 256
14C6 D8 E0        6 7181                 Ld      !rD,!r0
14C8 B0 EC        6 7182                 Clr     !rC
14CA                7183                 
14CA   --SKIP--     7184                 .DO     W_20MB + W_40MB
14CA   --SKIP--     7185                 Rlc     !rE     ;Result := Result * 2
14CA   --SKIP--     7186                 Rlc     !rD
14CA   --SKIP--     7187                 Rlc     !rC
14CA                7188                 .FIN
14CA   --SKIP--     7189                 .DO     W_40MB





        WIDGET.ASSEM            Page 114
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


14CA   --SKIP--     7190                 Rlc     !rE     ;Result := Result * 2
14CA   --SKIP--     7191                 Rlc     !rD
14CA   --SKIP--     7192                 Rlc     !rC
14CA                7193                 .FIN
14CA                7194                 
14CA 46 E7 01    10 7195                 Or      !r7,#Found
14CD 8B 34          7196                 Jr      SrchDone
14CF                7197                 
14CF 76 40 80    10 7198 SrchLpElse:     Tm      ScrReg0,#Nil        ;test if element.Ptr = Nil
14D2 EB 0F          7199                 Jr      Nz,NotInTabl
14D4                7200                 
14D4 08 41        6 7201                  Ld     !r0,ScrReg1 ;get address to current element
14D6 D6 18 09    20 7202                 Call    Get_Ptr
14D9 06 E3 03    10 7203                 Add     !r3,#3  ;point to next Ptr
14DC 16 E2 00    10 7204                 Adc     !r2,#0
14DF 82 02       12 7205                 Lde     !r0,@!!r2
14E1 8B A3          7206                 Jr      SrchLp
14E3                7207                 
14E3 B0 E7        6 7208 NotInTabl:      Clr     !r7             ;return Not_Found status
14E5                7209 
14E5 D9 4D        6 7210 Srch_Sp1:       Ld      ScrRegD,!rD
14E7                7211 
14E7                7212 ;***** INLINE: Div3_k *****
14E7 28 ED        6 7213                 Ld      !r2,!rD         ;shift right 1 byte
14E9 18 EC        6 7214                 Ld      !r1,!rC
14EB B0 E0        6 7215                 Clr     !r0
14ED                7216                 
14ED   --SKIP--     7217                 .DO     W_20MB
14ED   --SKIP--     7218                 Ld      !rF,1           ;shift left once for DIV 128
14ED                7219                 .FIN
14ED   --SKIP--     7220                 .DO     W_40MB
14ED   --SKIP--     7221                 Ld      !rF,2           ;shift left twice for DIV 64
14ED                7222                 .FIN
14ED                7223                 
14ED   --SKIP--     7224                 .DO     W_20MB + W_40MB
14ED   --SKIP--     7225                 Ld      !r3,!rE         ;shift left 1 bit
14ED   --SKIP--     7226 Div3_k_Lp:      Rlc     !r3             ;move !r3 bit 7 into carry flag
14ED   --SKIP--     7227                 Rlc     !r2             ;then shift all 3 bytes
14ED   --SKIP--     7228                 Rlc     !r1
14ED   --SKIP--     7229                 Rlc     !r0
14ED   --SKIP--     7230                 Djnz    !rF,Div3_k_Lp
14ED                7231                 .FIN
14ED 02 E2        6 7232                 Add     !rE,!r2         ;PhysicalBlock := LogicalBlock +
14EF 12 D1        6 7233                 Adc     !rD,!r1         ;               LogicalBlock DIV k
14F1 12 C0        6 7234                 Adc     !rC,!r0
14F3 08 ED        6 7235                 Ld      !r0,!rD ;save rollover byte
14F5                7236                 
14F5                7237                 .LSTOFF
14F5                7239                 .LSTON
14F5                7240                 .FIN
14F5                7241                 .DO     W_10MB
14F5 A4 4D E0    10 7242                 Cp      !r0,ScrRegD ;check for rollover
14F8                7243                 .LSTOFF
14F8                7258                 .LSTON





        WIDGET.ASSEM            Page 115
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


14F8                7259                 .FIN
14F8                7260                 
14F8 6B 09          7261                 Jr      Z,SrchDone
14FA 06 EE 01    10 7262                 Add     !rE,#1 ;otherwise account for rollover
14FD 16 ED 00    10 7263                 Adc     !rD,#0
1500 16 EC 00    10 7264                 Adc     !rC,#0
1503                7265 
1503 42 77        6 7266 SrchDone:       Or      !r7,!r7 ;set status
1505 08 40        6 7267                 Ld      !r0,ScrReg0         ;return status
1507 18 41        6 7268                 Ld      !r1,ScrReg1     ;return ptr to element
1509 8D 04 5F       7269                 Jp      Bank_Ret
150C                7270                 
150C                7271                 .LSTOFF
150C                7333                 .LSTON













































        WIDGET.ASSEM            Page 116
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


150C                7334                 .Page
150C                7335                 .FIN
150C                7336 
150C                7337 GetNewSpare:
150C D6 10 9E    20 7338                 Call    ExtPush_Vector ;save state
150F                7339                 
150F                7340                 .DO     W_10MB
150F 48 ED        6 7341                 Ld      !r4,!rD ;Div3_k, store result in !r4
1511                7342                 .FIN
1511                7343                 
1511 D8 E4        6 7344                  Ld     !rD,!r4
1513 CC 80        6 7345                  Ld     !rC,#TestBitMap
1515 D6 17 CF    20 7346                 Call    TSC_BitMap      ;IF BitMap[ Bit ] = 0 ...
1518 08 E4        6 7347                 Ld      !r0,!r4     ;assume Bit is unused
151A 6B 53          7348                 Jr      Z,Gns_End       ;Jump if THEN
151C                7349                 
151C 58 E4        6 7350                 Ld      !r5,!r4 ;ELSE ..
151E B0 E7        6 7351                 Clr     !r7
1520                7352                 
1520 D8 E5        6 7353 Gns_Lp1:         Ld     !rD,!r5     ;test for bit map location = 0
1522 CC 80        6 7354                  Ld     !rC,#TestBitMap
1524 D6 17 CF    20 7355                 Call    TSC_BitMap
1527 6B 09          7356                 Jr      Z,Gns_Lp1End
1529 5E           6 7357                 Inc     !r5 ;bump Temp1
152A A6 E5 4C    10 7358                 Cp      !r5,#76
152D 1B F1          7359                 Jr      Lt,Gns_Lp1
152F 46 E7 80    10 7360                 Or      !r7,#$80    ;NoHis := True
1532                7361                 
1532 68 E4        6 7362 Gns_Lp1End:     Ld      !r6,!r4
1534                7363 
1534 D8 E6        6 7364 Gns_Lp2:         Ld     !rD,!r6     ;test for bit map location = 0
1536 CC 80        6 7365                  Ld     !rC,#TestBitMap
1538 D6 17 CF    20 7366                 Call    TSC_BitMap
153B 6B 07          7367                 Jr      Z,Gns_Lp2End
153D 00 E6        6 7368                 Dec     !r6
153F AB F3          7369                 Jr      Gt,Gns_Lp2
1541 46 E7 40    10 7370                 Or      !r7,#$40    ;NoLos := True
1544                7371                 
1544 66 E7 C0    10 7372 Gns_Lp2End:     Tcm     !r7,#$C0    ;IF NoHis AND NoLos ..
1547 EB 0A          7373                 Jr      Nz,Gns_Chk_Hi
1549                7374                  
1549 0C 01        6 7375                  Ld     !r0,#1 ;byte 1
154B 1C 40        6 7376                  Ld     !r1,#SprBlk_Hard
154D D6 03 83    20 7377                 Call    SetStatus
1550 D6 04 80    20 7378                 Call    Abort
1553                7379                 
1553 08 E6        6 7380 Gns_Chk_Hi:     Ld      !r0,!r6     ;assume NoHis
1555 76 E7 80    10 7381                 Tm      !r7,#$80    ;test for NoHis
1558 EB 15          7382                 Jr      Nz,Gns_End
155A                7383                 
155A 08 E5        6 7384                 Ld      !r0,!r5 ;assume NoLos
155C 76 E7 40    10 7385                 Tm      !r7,#$40 ;test for NoLos
155F EB 0E          7386                 Jr      Nz,Gns_End
1561                7387                 





        WIDGET.ASSEM            Page 117
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1561 18 E5        6 7388                 Ld      !r1,!r5
1563 22 14        6 7389                 Sub     !r1,!r4 ;otherwise find out which is closer
1565 22 46        6 7390                 Sub     !r4,!r6
1567                7391                 
1567 08 E6        6 7392                 Ld      !r0,!r6 ;assume Temp2 is closer
1569 A2 14        6 7393                 Cp      !r1,!r4
156B FB 02          7394                 Jr      Uge,Gns_End
156D 08 E5        6 7395                 Ld      !r0,!r5 ; otherwise Temp1 is closer
156F                7396                 
156F 70 E0          7397 Gns_End:        Push    !r0
1571 D6 10 A6    20 7398                 Call    ExtPop_Vector
1574 50 E0       10 7399                 Pop     !r0
1576 8D 04 5F       7400                 Jp      Bank_Ret
1579                7401                 
1579                7402                 .LSTOFF
1579                7462                 .LSTON











































        WIDGET.ASSEM            Page 118
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1579                7463                 .Page
1579                7464                 .FIN
1579                7465                 
1579                7466 AddSpare:
1579 D6 17 97    20 7467                 Call    Get_HeadPtr     ;IF HeadPtr.Nil ...
157C EB 09          7468                 Jr      Nz,ADS_Else1
157E                7469                 
157E 56 E0 7F    10 7470                 And     !r0,#$FF-Nil    ;THEN HeadPt.Nil := False
1581 42 0F        6 7471                 Or      !r0,!rF         ;     HeadPtr.Ptr := Location
1583 92 02       12 7472                 Lde     @!!r2,!r0       ; create link
1585 8B 10          7473                 Jr      ADS_UpDate
1587                7474                 
1587 D6 17 B4    20 7475 ADS_Else1:      Call    Get_EoList      ;search 'til end of list
158A 56 E1 7F    10 7476                 And     !r1,#$FF-Nil    ;Ptr^.Nil := False
158D 92 12       12 7477                 Lde     @!!r2,!r1       ;update table
158F                7478                 
158F 06 E3 03    10 7479                 Add     !r3,#3          ;get Ptr^.Ptr
1592 16 E2 00    10 7480                 Adc     !r2,#0
1595 92 F2       12 7481                 Lde     @!!r2,!rF       ;create link
1597                7482                 
1597 08 EF        6 7483 ADS_UpDate:      Ld     !r0,!rF         ;get structure ptr
1599 D6 18 09    20 7484                 Call    Get_Ptr         ;create a real ptr out of it
159C                7485                 
159C 0C E0        6 7486                 Ld      !r0,#Nil+Used+Useable
159E 42 08        6 7487                 Or      !r0,!r8 ;merge Spare/Bad Block/Type Info
15A0 44 58 E0    10 7488                 Or      !r0,Data_Type
15A3 92 02       12 7489                 Lde     @!!r2,!r0
15A5 A0 E2       10 7490                 Incw    !!r2            ;point to element.HiToken
15A7 08 ED        6 7491                 Ld      !r0,!rD         ;get HiToken
15A9 56 E0 03    10 7492                 And     !r0,#$03
15AC 92 02       12 7493                 Lde     @!!r2,!r0
15AE A0 E2       10 7494                 Incw    !!r2            ;point to element.LoToken
15B0 92 E2       12 7495                 Lde     @!!r2,!rE       ;store LoToken
15B2                7496                 
15B2 CC 40        6 7497                  Ld     !rC,#SetBitMap
15B4 D8 EF        6 7498                  Ld     !rD,!rF
15B6 D6 17 CF    20 7499                 Call    TSC_BitMap      ;update the bit map
15B9 8D 04 5F       7500                 Jp      Bank_Ret
15BC                7501                 
15BC                7502                 .LSTOFF
15BC                7547                 .LSTON


















        WIDGET.ASSEM            Page 119
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


15BC                7548                 .Page
15BC                7549                 .FIN
15BC                7550                 
15BC                7551 DeleteSpare:
15BC D6 05 46    20 7552                 Call    Load_Logical
15BF D6 14 7F    20 7553                 Call    SrchSpTabl
15C2 F8 E1        6 7554                 Ld      !rF,!r1
15C4 EB 03          7555                 Jr      Nz,Chk_HdPtr
15C6                7556                 
15C6 D6 04 80    20 7557                 Call    Abort
15C9                7558                 
15C9 D6 05 46    20 7559 Chk_HdPtr:      Call    Load_Logical
15CC D6 17 97    20 7560                 Call    Get_HeadPtr     ;IF ( Get_HeadPtr... )
15CF 09 4E        6 7561                 Ld      ScrRegE,!r0
15D1 08 EF        6 7562                 Ld      !r0,!rF
15D3 D6 18 09    20 7563                 Call    Get_Ptr
15D6 82 02       12 7564                 Lde     !r0,@!!r2
15D8 76 E0 80    10 7565                 Tm      !r0,#Nil
15DB 6B 0E          7566                 Jr      Z,Chk_Chain
15DD A4 EF 4E    10 7567                 Cp      ScrRegE,!rF
15E0 EB 09          7568                 Jr      Nz,Chk_Chain    ;ELSE ...
15E2                7569                 
15E2 D6 17 97    20 7570                 Call    Get_HeadPtr
15E5 0C 80        6 7571                 Ld      !r0,#Nil        ;THEN Head.Nil := True
15E7 92 02       12 7572                 Lde     @!!r2,!r0
15E9 8B 47          7573                 Jr      Zero_Element
15EB                7574                 
15EB 09 4F        6 7575 Chk_Chain:      Ld      ScrRegF,!r0
15ED 46 E0 80    10 7576                 Or      !r0,#Nil
15F0 92 02       12 7577                 Lde     @!!r2,!r0       ;break the chain
15F2                7578                 
15F2 08 4E        6 7579                  Ld      !r0,ScrRegE
15F4 D6 17 B4    20 7580                 Call    Get_EoList      ;get Ptr( Previous ) in ScrReg0,1
15F7                7581                 
15F7 08 4F        6 7582                 Ld      !r0,ScrRegF     ;get original status back
15F9 76 E0 80    10 7583                 Tm      !r0,#Nil        ;IF Ptr1^.Nil
15FC 28 40        6 7584                 Ld      !r2,ScrReg0     ;get Ptr( Previous )
15FE 38 41        6 7585                 Ld      !r3,ScrReg1
1600 6B 09          7586                 Jr      Z,D_Chk_Else    ; ELSE...
1602                7587                 
1602 82 02       12 7588                 Lde     !r0,@!!r2
1604 46 E0 80    10 7589                 Or      !r0,#Nil
1607 92 02       12 7590                 Lde     @!!r2,!r0
1609 8B 27          7591                 Jr      Zero_Element
160B                7592                 
160B A4 4E EF    10 7593 D_Chk_Else:     Cp      !rF,ScrRegE
160E EB 05          7594                 Jr      Nz,Get_Previous
1610 D6 17 97    20 7595                 Call    Get_HeadPtr
1613 8B 06          7596                 Jr      Save_Previous
1615                7597                 
1615 06 E3 03    10 7598 Get_Previous:   Add     !r3,#3          ;get to Ptr( Previous )^.Ptr
1618 16 E2 00    10 7599                 Adc     !r2,#0
161B 70 E2          7600 Save_Previous:  Push    !r2
161D 70 E3          7601                 Push    !r3





        WIDGET.ASSEM            Page 120
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


161F                7602                  
161F 08 EF        6 7603                  Ld      !r0,!rF
1621 D6 18 09    20 7604                 Call    Get_Ptr
1624 06 E3 03    10 7605                 Add     !r3,#3          ;get to Ptr1^.Ptr
1627 16 E2 00    10 7606                 Adc     !r2,#0
162A 82 02       12 7607                 Lde     !r0,@!!r2
162C                7608                 
162C 50 E3       10 7609                 Pop     !r3
162E 50 E2       10 7610                 Pop     !r2
1630 92 02       12 7611                 Lde     @!!r2,!r0       ;Ptr( Previous )^.Ptr := Ptr1^.Ptr
1632                7612                 
1632 08 EF        6 7613 Zero_Element:    Ld      !r0,!rF         ;get Ptr1 once more
1634 D6 18 09    20 7614                 Call    Get_Ptr
1637                7615                 
1637 0C FF        6 7616                 Ld      !r0,#$FF ;initiale element
1639 1C 04        6 7617                 Ld      !r1,#4          ;zero 4 bytes
163B 92 02       12 7618 Zero_E_Lp:      Lde     @!!r2,!r0
163D A0 E2       10 7619                 Incw    !!r2
163F 1A FA          7620                 Djnz    !r1,Zero_E_Lp
1641                7621                 
1641 CC 20        6 7622                  Ld     !rC,#ClearBitMap
1643 D8 EF        6 7623                  Ld     !rD,!rF
1645 D6 17 CF    20 7624                 Call    TSC_BitMap
1648 8D 04 5F       7625                 Jp      Bank_Ret
164B                7626                 
164B                7627                 .LSTOFF
164B                7702                 .LSTON
































        WIDGET.ASSEM            Page 121
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


164B                7703                 .Page
164B                7704                 .FIN
164B                7705 
164B                7706 CnvrtLogical:
164B D6 14 7F    20 7707 CnvrtSrch:      Call    SrchSpTabl      ;check if logical block in spare table
164E 70 FC          7708                 Push    Flags           ;save results
1650 70 E0          7709                 Push    !r0             ;save status
1652 70 E1          7710                 Push    !r1             ;save ptr
1654                7711                 
1654 2C 20        6 7712                  Ld     !r2,#.HIBYTE. Get_Cyl_H_S
1656 3C D4        6 7713                  Ld     !r3,#.LOWBYTE. Get_Cyl_H_S
1658 D6 04 10    20 7714                 Call    Bank_Call     ;get cylinder, head,and sector
165B 08 EF        6 7715                  Ld     !r0,!rF         ;pass physical sector
165D 2C 25        6 7716                  Ld     !r2,#.HIBYTE. ReMap_Sector
165F 3C 3A        6 7717                  Ld     !r3,#.LOWBYTE. ReMap_Sector
1661 D6 04 10    20 7718                 Call    Bank_Call
1664 F8 E0        6 7719                  Ld     !rF,!r0         ;            !rF := logical sector
1666                7720                 
1666 50 E1       10 7721                 Pop     !r1             ;Element.Ptr
1668 50 E0       10 7722                 Pop     !r0             ;Search Status
166A 50 FC       10 7723                 Pop     Flags
166C                7724                 
166C 8D 04 5F       7725                 Jp      Bank_Ret
166F                7726                 
166F                7727                 .LSTOFF
166F                7770                 .LSTON

































        WIDGET.ASSEM            Page 122
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


166F                7771                 .Page
166F                7772                 .FIN
166F                7773 
166F                7774 SrchCache:
166F 31 40        6 7775                 Srp     #Wrk_Scr
1671 4C 14        6 7776                 Ld      !r4,#CacheLength
1673                7777                 
1673 AC 16        6 7778 Srch_C_Lp:      Ld      !rA,#.HIBYTE. CacheArray
1675 BC FC        6 7779                 Ld      !rB,#.LOWBYTE. CacheArray
1677 08 5B        6 7780                 Ld      !r0,Cache_Index
1679 90 E0        6 7781                 Rl      !r0 ;multiply by 4
167B 90 E0        6 7782                 Rl      !r0
167D 02 B0        6 7783                 Add     !rB,!r0 ;index into array
167F 16 EA 00    10 7784                 Adc     !rA,#0
1682                7785                 
1682 8C 40        6 7786                 Ld      !r8,#ScrReg0
1684                7787                 
1684 83 8A       18 7788                 Ldei    @!r8,@!!rA ;load CacheArray.Logical
1686 83 8A       18 7789                 Ldei    @!r8,@!!rA
1688 83 8A       18 7790                 Ldei    @!r8,@!!rA
168A B4 1C E0    10 7791                 Xor     !r0,Wrk_Sys+$C ;compare values
168D B4 1D E1    10 7792                 Xor     !r1,Wrk_Sys+$D
1690 B4 1E E2    10 7793                 Xor     !r2,Wrk_Sys+$E
1693 42 01        6 7794                 Or      !r0,!r1 ;test for zero
1695 42 02        6 7795                 Or      !r0,!r2
1697 EB 17          7796                 Jr      Nz,Srch_More
1699                7797                 
1699 8C 16        6 7798                 Ld      !r8,#.HIBYTE. CachStat ;get CacheStatus
169B 9C E8        6 7799                 Ld      !r9,#.LOWBYTE. CachStat
169D 04 5B E9    10 7800                 Add     !r9,Cache_Index
16A0 20 5B        6 7801                 Inc     Cache_Index
16A2 82 18       12 7802                 Lde     !r1,@!!r8
16A4 19 5A        6 7803                 Ld      BlkStat,!r1 ;save search result
16A6 82 0A       12 7804                 Lde     !r0,@!!rA ;get Head/Sector info
16A8                7805                 
16A8 31 10        6 7806 Srch_C_End:     Srp     #Wrk_Sys ;get back to normal system context
16AA 08 40        6 7807                 Ld      !r0,ScrReg0 ;pass head/sector info back
16AC 76 5A 80    10 7808                 Tm      BlkStat,#CachSeek ;set seekneeded flag
16AF AF          14 7809                 Ret
16B0                7810 
16B0 20 5B        6 7811 Srch_More:      Inc     Cache_Index
16B2 A6 5B 14    10 7812                 Cp      Cache_Index,#CacheLength ;check for cache overflow
16B5 1B 02          7813                 Jr      Lt,Srch_M_1
16B7                7814                 
16B7 B0 5B        6 7815                 Clr     Cache_Index
16B9 4A B8          7816 Srch_M_1:       Djnz    !r4,Srch_C_Lp
16BB                7817                 
16BB E6 5A 80    10 7818                 Ld      BlkStat,#CachSeek
16BE B0 5B        6 7819                 Clr     Cache_Index
16C0 8B E6          7820                 Jr      Srch_C_End
16C2                7821                 
16C2                7822                 .LSTOFF
16C2                7882                 .LSTON






        WIDGET.ASSEM            Page 123
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


16C2                7883                 .Page
16C2                7884                 .FIN
16C2                7885 
16C2                7886 Data_Ex_Handler:
16C2 70 E0          7887                 Push    !r0 ;save error code
16C4                7888                  
16C4 D6 10 9E    20 7889                 Call    ExtPush_Vector ;save state
16C7                7890                 
16C7 76 56 20    10 7891                 Tm      DiskStat,#Wr_Op
16CA 6B 09          7892                 Jr      Z,Data_Ex_RdErr
16CC                7893                 
16CC 0C 03        6 7894                  Ld     !r0,#3 ;load status byte 3
16CE 18 29        6 7895                  Ld     !r1,WrErrCnt
16D0 D6 03 83    20 7896                 Call    SetStatus
16D3 8B 03          7897                 Jr      Data_Ex_Case
16D5                7898                 
16D5 D6 04 CE    20 7899 Data_Ex_RdErr:  Call    SS_ReadErr
16D8                7900                 
16D8 2C 29        6 7901 Data_Ex_Case:    Ld     !r2,#.HIBYTE. Set_SeekNeeded
16DA 3C 56        6 7902                  Ld     !r3,#.LOWBYTE. Set_SeekNeeded
16DC D6 04 10    20 7903                 Call    Bank_Call ;update cache on next Pro/Sys command
16DF                7904                 
16DF 50 E1       10 7905                 Pop     !r1 ;get error code back
16E1 56 E1 7F    10 7906                 And     !r1,#$7F ;mask off error flag
16E4 76 E1 01    10 7907                 Tm      !r1,#01 ;see if error code is odd
16E7 EB 05          7908                 Jr      Nz,Data_Ex_Abort
16E9 A6 E1 0A    10 7909                 Cp      !r1,#Ex_Case_Max ;bounds check
16EC 2B 03          7910                 Jr      Le,Data_Ex_Cmnd
16EE                7911                 
16EE D6 04 80    20 7912 Data_Ex_Abort:  Call    Abort
16F1                7913                 
16F1 2C 17        6 7914 Data_Ex_Cmnd:   Ld      !r2,#.HIBYTE. Ex_Jp_Tbl
16F3 3C 02        6 7915                 Ld      !r3,#.LOWBYTE. Ex_Jp_Tbl
16F5 02 31        6 7916                 Add     !r3,!r1 ;add offset
16F7 16 E2 00    10 7917                 Adc     !r2,#0
16FA C2 E2       12 7918                 Ldc     !rE,@!!r2 ;get routine to execute
16FC A0 E2       10 7919                 Incw    !!r2
16FE C2 F2       12 7920                 Ldc     !rF,@!!r2
1700 30 EE        8 7921                 Jp      @!rE ;go to routine
1702                7922                 
1702 17 0E          7923 Ex_Jp_Tbl:      .DW     X_Undeter
1704 17 13          7924                 .DW     X_Spare
1706 17 1A          7925                 .DW     X_BadBlock
1708 17 2E          7926                 .DW     X_ReadErr
170A 17 3E          7927                 .DW     X_HdrBadBlock
170C 17 64          7928                 .DW     X_HdrSpare
170E                7929                 
170E D6 04 C0    20 7930 X_Undeter:      Call    SS_OpFail
1711 8B 25          7931                 Jr      Except_Return
1713                7932                 
1713 AC 10        6 7933 X_Spare:        Ld      !rA,#Spare
1715 D6 13 64    20 7934 X_Spr_Call:     Call    SprBlock
1718 8B 1E          7935                 Jr      Except_Return
171A                7936                 





        WIDGET.ASSEM            Page 124
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


171A 4C 02        6 7937 X_BadBlock:     Ld      !r4,#2 ;retry 2 times
171C 70 E4          7938 X_BB_Lp:        Push    !r4
171E D6 17 69    20 7939                 Call    Bad_Recover
1721 50 E4       10 7940                 Pop     !r4
1723 EB EE          7941                 Jr      Nz,X_Spare
1725 4A F5          7942                 Djnz    !r4,X_BB_Lp
1727                7943                 
1727 D6 04 C0    20 7944                 Call    SS_OpFail
172A AC 00        6 7945                  Ld     !rA,#BadBlock
172C 8B E7          7946                 Jr      X_Spr_Call
172E                7947                 
172E D6 04 CE    20 7948 X_ReadErr:      Call    SS_ReadErr
1731 2C 20        6 7949                  Ld     !r2,#.HIBYTE. Buf2_To_RBuf
1733 3C 5B        6 7950                  Ld     !r3,#.LOWBYTE. Buf2_To_RBuf
1735 D6 04 10    20 7951                 Call    Bank_Call
1738 D6 10 A6    20 7952 Except_Return:  Call    ExtPop_Vector
173B 8D 04 5F       7953                 Jp      Bank_Ret
173E                7954                 
173E D6 17 69    20 7955 X_HdrBadBlock:  Call    Bad_Recover
1741 EB D0          7956                 Jr      Nz,X_Spare
1743 D6 04 DB    20 7957                 Call    SS_NoHdr
1746 D6 11 2B    20 7958                 Call    LocateSector
1749 2C 20        6 7959                  Ld     !r2,#.HIBYTE. ReadHdr
174B 3C 07        6 7960                  Ld     !r3,#.LOWBYTE. ReadHdr
174D D6 04 10    20 7961                 Call    Bank_Call
1750 6B 09          7962                 Jr      Z,X_Hdr_Crct
1752                7963                  
1752 2C 20        6 7964                  Ld     !r2,#.HIBYTE. RBuf_To_Buf2
1754 3C 99        6 7965                  Ld     !r3,#.LOWBYTE. RBuf_To_Buf2
1756 D6 04 10    20 7966                 Call    Bank_Call
1759 8B B8          7967                 Jr      X_Spare
175B                7968                 
175B 2C 2E        6 7969 X_Hdr_Crct:      Ld     !r2,#.HIBYTE. Ecc
175D 3C 3C        6 7970                  Ld     !r3,#.LOWBYTE. Ecc
175F D6 04 10    20 7971                 Call    Bank_Call
1762 6B B6          7972                 Jr      Z,X_BadBlock
1764                7973 
1764 D6 04 DB    20 7974 X_HdrSpare:     Call    SS_NoHdr
1767 8B AA          7975                 Jr      X_Spare
1769                7976                 
1769                7977                 .LSTOFF
1769                7999                 .LSTON

















        WIDGET.ASSEM            Page 125
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1769                8000                 .Page
1769                8001                 .FIN
1769                8002                 
1769                8003 Bad_Recover:
1769 76 56 01    10 8004                 Tm      DiskStat,#Offset_On ;check for auto_offset
176C EB 03          8005                 Jr      Nz,B_Rcvr_Read
176E                8006                 
176E D6 05 03    20 8007                 Call    ReSeek
1771                8008 
1771 D6 13 03    20 8009 B_Rcvr_Read:    Call    Read_Common
1774 EB 20          8010                 Jr      Nz,Bad_Rcvr_Ret
1776                8011                 
1776 A6 E0 86    10 8012                 Cp      !r0,#Error+Ex_ReadErr
1779 6B 10          8013                 Jr      Z,Bad_Rc_Spr
177B                8014                 
177B A6 E0 84    10 8015                 Cp      !r0,#Error+Ex_BadBlock
177E 6B 0F          8016                 Jr      Z,Bad_Rc_Ecc
1780                8017                 
1780 A6 E0 82    10 8018                 Cp      !r0,#Error+Ex_SprBlock
1783 6B 06          8019                 Jr      Z,Bad_Rc_Spr
1785                8020                 
1785 0C 00        6 8021                 Ld      !r0,#0
1787 42 00        6 8022 Bad_Rc_Set:     Or      !r0,!r0
1789 8B 0B          8023                 Jr      Bad_Rcvr_Ret
178B                8024                 
178B 0C 01        6 8025 Bad_Rc_Spr:     Ld      !r0,#1
178D 8B F8          8026                 Jr      Bad_Rc_Set
178F                8027                 
178F 2C 2E        6 8028 Bad_Rc_Ecc:      Ld     !r2,#.HIBYTE. Ecc
1791 3C 3C        6 8029                  Ld     !r3,#.LOWBYTE. Ecc
1793 D6 04 10    20 8030                 Call    Bank_Call
1796                8031                 
1796 AF          14 8032 Bad_Rcvr_Ret:   Ret
1797                8033                 
1797                8034                 .LSTOFF
1797                8100                 .LSTON























        WIDGET.ASSEM            Page 126
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1797                8101                 .Page
1797                8102                 .FIN
1797                8103 
1797                8104 Get_HeadPtr:    
1797 18 ED        6 8105                 Ld      !r1,!rD         ;bits 8:15 of logical block #
1799 56 E1 FC    10 8106                 And     !r1,#$FC
179C 08 EC        6 8107                 Ld      !r0,!rC         ;bit 16 of logical block #
179E C0 E0        6 8108                 Rrc     !r0             ;put bit 16 into carry flag
17A0 C0 E1        6 8109                 Rrc     !r1             ;shift bits 10:16 into !r1
17A2 CF           6 8110                 Rcf                     ;arithmetic divide by 2
17A3 C0 E1        6 8111                 Rrc     !r1
17A5                8112                 
17A5 2C 14        6 8113                 Ld      !r2,#.HIBYTE. SegPtrArray
17A7 3C C5        6 8114                 Ld      !r3,#.LOWBYTE. SegPtrArray
17A9 02 31        6 8115                 Add     !r3,!r1         ;add in offset to array
17AB 16 E2 00    10 8116                 Adc     !r2,#0
17AE 82 02       12 8117                 Lde     !r0,@!!r2       ;load HeadPtr
17B0                8118                 
17B0 66 E0 80    10 8119                 Tcm     !r0,#Nil        ;test for Nil Ptr
17B3 AF          14 8120                 Ret
17B4                8121                 
17B4                8122                 .LSTOFF
17B4                8159                 .LSTON




































        WIDGET.ASSEM            Page 127
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


17B4                8160                 .Page
17B4                8161                 .FIN
17B4                8162                 
17B4 09 43        6 8163 Get_EoList:     Ld      ScrReg3,!r0
17B6 D6 18 09    20 8164                 Call    Get_Ptr         ;create ptr into Spare Table
17B9 82 12       12 8165                 Lde     !r1,@!!r2       ;get element status
17BB 76 E1 80    10 8166                 Tm      !r1,#Nil        ;IF Nil THEN Exit Loop
17BE EB 0E          8167                 Jr      Nz,EoList_End
17C0                8168                 
17C0 29 40        6 8169                 Ld      ScrReg0,!r2     ;save Ptr to element i - 1
17C2 39 41        6 8170                 Ld      ScrReg1,!r3
17C4 06 E3 03    10 8171                 Add     !r3,#3  ;get ptr to next
17C7 16 E2 00    10 8172                 Adc     !r2,#0
17CA 82 02       12 8173                 Lde     !r0,@!!r2
17CC 8B E6          8174                 Jr      Get_EoList
17CE                8175                 
17CE AF          14 8176 EoList_End:     Ret
17CF                8177                 
17CF                8178                 .LSTOFF
17CF                8208                 .LSTON







































        WIDGET.ASSEM            Page 128
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


17CF                8209                 .Page
17CF                8210                 .FIN
17CF                8211 
17CF 08 ED        6 8212 TSC_BitMap:     Ld      !r0,!rD
17D1                8213                 
17D1 3C 03        6 8214                 Ld      !r3,#3   ;right hand justify the byte index
17D3 CF           6 8215 TSC_Lp1:        Rcf
17D4 C0 E0        6 8216                 Rrc     !r0
17D6 3A FB          8217                 Djnz    !r3,TSC_Lp1
17D8                8218                 
17D8 2C 15        6 8219                 Ld      !r2,#.HIBYTE. SpareBitMap
17DA 3C 47        6 8220                 Ld      !r3,#.LOWBYTE. SpareBitMap
17DC 02 30        6 8221                 Add     !r3,!r0
17DE 16 E2 00    10 8222                 Adc     !r2,#0  ;inc second byte of address if needed
17E1 82 12       12 8223                 Lde     !r1,@!!r2 ;load in the byte from bit map
17E3                8224                 
17E3 56 ED 07    10 8225                 And     !rD,#$07 ;mask off all but MOD 8 of original index
17E6 0C 80        6 8226                 Ld      !r0,#$80 ;convert index to mask
17E8 6B 04          8227                 Jr      Z,TSC_Map
17EA                8228                 
17EA E0 E0        6 8229 TSC_Lp2:        Rr      !r0
17EC DA FC          8230                 Djnz    !rD,TSC_Lp2
17EE 70 E0          8231 TSC_Map:        Push    !r0     ;save mask
17F0                8232                 
17F0 76 EC 80    10 8233                 Tm      !rC,#TestBitMap
17F3 EB 0F          8234                 Jr      Nz,TSC_End
17F5 76 EC 40    10 8235                 Tm      !rC,#SetBitMap
17F8 EB 06          8236                 Jr      Nz,TSC_Set
17FA                8237                 
17FA 60 E0        6 8238 TSC_Clear:      Com     !r0
17FC 52 10        6 8239                 And     !r1,!r0 ;mask out bit
17FE 8B 02          8240                 Jr      TSC_SCEnd
1800                8241                 
1800 42 10        6 8242 TSC_Set:        Or      !r1,!r0 ;merge in bit
1802 92 12       12 8243 TSC_SCEnd:      Lde     @!!r2,!r1 ;update the bit map
1804 50 E0       10 8244 TSC_End:        Pop     !r0
1806 72 10        6 8245                 Tm      !r1,!r0 ;test the bit
1808 AF          14 8246                 Ret
1809                8247                 
1809                8248                 .LSTOFF
1809                8270                 .LSTON


















        WIDGET.ASSEM            Page 129
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1809                8271                 .Page
1809                8272                 .FIN
1809                8273                 
1809 2C 15        6 8274 Get_Ptr:        Ld      !r2,#.HIBYTE. Sparetable
180B 3C 51        6 8275                 Ld      !r3,#.LOWBYTE. SpareTable
180D                8276                 
180D 70 E0          8277                 Push    !r0 ;save structure ptr
180F 18 E0        6 8278                 Ld      !r1,!r0
1811 B0 E0        6 8279                 Clr     !r0
1813 02 11        6 8280                 Add     !r1,!r1 ; !!r0 := 4 * !r1
1815 02 11        6 8281                 Add     !r1,!r1
1817 16 E0 00    10 8282                 Adc     !r0,#0
181A 02 31        6 8283                 Add     !r3,!r1         ;add offset into table
181C 12 20        6 8284                 Adc     !r2,!r0
181E 50 E0       10 8285                 Pop     !r0 ;get original structure ptr back
1820 8D 04 5F       8286                 Jp      Bank_Ret
1823                8287                 
1823                8288                 .LSTOFF
1823                8307                 .LSTON








































        WIDGET.ASSEM            Page 130
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1823                8308                 .Page
1823                8309                 .FIN
1823                8310 
1823                8311 Get_Spr_Code:
1823 08 5A        6 8312                 Ld      !r0,BlkStat
1825 56 E0 03    10 8313                 And     !r0,#03 ;mask off all but SpareCode portion
1828 AF          14 8314                 Ret
1829                8315                 
1829                8316                 .LSTOFF
1829                8377                 .LSTON

















































        WIDGET.ASSEM            Page 131
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1829                8378                 .Page
1829                8379                 .FIN
1829                8380                 
1829                8381 D_Read_ID:
1829 D6 1E 6C    20 8382                 Call    ClrNormStat
182C E6 0A 02    10 8383                  Ld     Wrk_Io+$A,#D_R_ID_Response
182F D6 02 8B    20 8384                 Call    Ack_Read
1832                8385 
1832 2C 20        6 8386 Read_ID:         Ld     !r2,#.HIBYTE. Zero_RdBuf
1834 3C B6        6 8387                  Ld     !r3,#.LOWBYTE. Zero_RdBuf
1836 D6 04 10    20 8388                 Call    Bank_Call
1839                8389                 
1839 CC 10        6 8390                 Ld      !rC,#.HIBYTE. RBuffer1
183B DC 19        6 8391                 Ld      !rD,#.LOWBYTE. RBuffer1
183D EC 10        6 8392                 Ld      !rE,#.HIBYTE. DeviceParams
183F FC AE        6 8393                 Ld      !rF,#.LOWBYTE. DeviceParams
1841 1C 1E        6 8394                 Ld      !r1,#Dev_Parm_Length
1843                8395                 
1843 C2 0E       12 8396 Read_ID_Lp:     Ldc     !r0,@!!rE
1845 92 0C       12 8397                 Lde     @!!rC,!r0
1847 A0 EC       10 8398                 Incw    !!rC
1849 A0 EE       10 8399                 Incw    !!rE
184B 1A F6          8400                 Djnz    !r1,Read_ID_Lp
184D                8401                 
184D B0 E0        6 8402                 Clr     !r0
184F B0 E1        6 8403                 Clr     !r1
1851                8404                 
1851 EC 15        6 8405                  Ld     !rE,#.HIBYTE. SprCount
1853 FC 45        6 8406                  Ld     !rF,#.LOWBYTE. SprCount
1855 82 2E       12 8407                  Lde    !r2,@!!rE ;get SpareCount
1857 D6 18 6F    20 8408                 Call    MoveI_3
185A                8409                 
185A A0 EE       10 8410                  Incw   !!rE ;point to BadBlock count
185C 82 2E       12 8411                  Lde    !r2,@!!rE
185E D6 18 6F    20 8412                 Call    MoveI_3
1861                8413                 
1861 2C 14        6 8414                  Ld     !r2,#.HIBYTE. FmtOffset
1863 3C C3        6 8415                  Ld     !r3,#.LOWBYTE. FmtOffset
1865 E8 EC        6 8416                  Ld     !rE,!rC
1867 F8 ED        6 8417                  Ld     !rF,!rD
1869 D6 1E A3    20 8418                 Call    Move4_B0
186C                8419                 
186C 8D 12 CB       8420                 Jp      Rd_Leave
186F                8421                 
186F 3C 03        6 8422 MoveI_3:        Ld      !r3,#3 ;move 3 bytes
1871 48 FD        6 8423                 Ld      !r4,Rp
1873 93 4C       18 8424 MoveI_3_Lp:     Ldei    @!!rC,@!r4
1875 3A FC          8425                 Djnz    !r3,MoveI_3_Lp
1877 AF          14 8426                 Ret
1878                8427                 
1878                8428                 .LSTOFF
1878                8457                 .LSTON







        WIDGET.ASSEM            Page 132
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1878                8458                 .Page
1878                8459                 .FIN
1878                8460                 
1878                8461 D_Read_SprTbl:
1878 D6 1E 6C    20 8462                 Call    ClrNormStat
187B E6 0A 0F    10 8463                 Ld      Wrk_Io+$A,#D_R_Spr_Response
187E D6 02 8B    20 8464                 Call    Ack_Read
1881                8465 
1881 2C 20        6 8466 Read_SprTbl:     Ld     !r2,#.HIBYTE. Spr_To_RBuf
1883 3C 7F        6 8467                  Ld     !r3,#.LOWBYTE. Spr_To_RBuf
1885 D6 04 10    20 8468                 Call    Bank_Call
1888                8469                 
1888 8D 12 CB       8470                 Jp      Rd_Leave
188B                8471                 
188B                8472                 .LSTOFF
188B                8508                 .LSTON











































        WIDGET.ASSEM            Page 133
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


188B                8509                 .Page
188B                8510                 .FIN
188B                8511 
188B                8512 Pro_Write:
188B E6 0A 03    10 8513                  Ld     Wrk_Io+$A,#Wr_Response
188E D6 18 A6    20 8514                 Call    Pro_Wr_SetUp
1891                8515                 
1891 76 5A 02    10 8516                 Tm      BlkStat,#B_Block ;IF BadBlock
1894 6B 05          8517                 Jr      Z,ProWr_1
1896                8518                 
1896 D6 18 D3    20 8519 Pro_Wr_BB:      Call    Wr_BBlock
1899 8B 08          8520                 Jr      Wr_Leave
189B                8521                 
189B D6 18 E0    20 8522 ProWr_1:        Call    Wr_Common
189E EB 03          8523 Pro_Wr_Exit:    Jr      Nz,Wr_Leave
18A0                8524                 
18A0 D6 16 C2    20 8525                 Call    Data_Ex_Handler
18A3                8526                 
18A3 8D 12 CB       8527 Wr_Leave:       Jp      Rd_Leave
18A6                8528                 







































        WIDGET.ASSEM            Page 134
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


18A6                8529                 .Page
18A6                8530                 
18A6 D6 1E 6C    20 8531 Pro_Wr_SetUp:   Call    ClrNormStat
18A9                8532                 
18A9 D6 02 8A    20 8533                 Call    Get_Wr_Data
18AC                8534                 
18AC 0C 01        6 8535                  Ld     !r0,#Pro_Log_Offset
18AE D6 05 87    20 8536                 Call    Ld_LgclBlk ;LogicalBlockNumber := ...
18B1                8537                 
18B1 8C 01        6 8538                  Ld     !r8,#Widget
18B3 2C 21        6 8539                  Ld     !r2,#.HIBYTE. Get_Type
18B5 3C 9B        6 8540                  Ld     !r3,#.LOWBYTE. Get_Type
18B7 D6 04 10    20 8541                 Call    Bank_Call ;check block bounds
18BA                8542                 
18BA E6 57 90    10 8543                 Ld      Seek_Type,#Access_Offset
18BD E6 58 02    10 8544                 Ld      Data_Type,#User_Type
18C0 46 56 20    10 8545                 Or      DiskStat,#Wr_Op
18C3                8546                 
18C3 2C 1F        6 8547                  Ld     !r2,#.HIBYTE. OverLap
18C5 3C 92        6 8548                  Ld     !r3,#.LOWBYTE. OverLap
18C7 D6 04 10    20 8549                 Call    Bank_Call
18CA                8550                 
18CA 76 56 01    10 8551                 Tm      DiskStat,#Offset_On
18CD EB 03          8552                 Jr      Nz,P_W_S_End
18CF                8553                 
18CF D6 05 03    20 8554                 Call    ReSeek
18D2                8555                 
18D2 AF          14 8556 P_W_S_End:      Ret
18D3                8557 
18D3                8558 ;*********************************
18D3                8559 
18D3 2C 20        6 8560 Wr_BBlock:       Ld     !r2,#.HIBYTE. WrBuf_To_Buf2
18D5 3C 65        6 8561                  Ld     !r3,#.LOWBYTE. WrBuf_To_Buf2
18D7 D6 04 10    20 8562                 Call    Bank_Call
18DA                8563                  
18DA 0C 82        6 8564                  Ld     !r0,#Error+Ex_SprBlock
18DC D6 16 C2    20 8565                 Call    Data_Ex_Handler
18DF AF          14 8566                 Ret
18E0                8567                 
18E0                8568                 .LSTOFF
18E0                8628                 .LSTON


















        WIDGET.ASSEM            Page 135
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


18E0                8629                 .Page
18E0                8630                 .FIN
18E0                8631 
18E0                8632 Wr_Common:
18E0 E6 42 12    10 8633                  Ld     ScrReg2,#.HIBYTE. WBlkFence ;check for host overflow
18E3 E6 43 70    10 8634                  Ld     ScrReg3,#.LOWBYTE. WBlkFence
18E6 2C 24        6 8635                  Ld     !r2,#.HIBYTE. Chk_PassWord
18E8 3C 30        6 8636                  Ld     !r3,#.LOWBYTE. Chk_PassWord
18EA D6 04 10    20 8637                 Call    Bank_Call
18ED EB 0A          8638                 Jr      Nz,Wr_Cmn_Ok
18EF                8639                 
18EF 0C 00        6 8640                  Ld     !r0,#0 ;byte zero
18F1 1C 40        6 8641                  Ld     !r1,#WrBuf_OR ;buffer over run
18F3 D6 03 83    20 8642                 Call    SetStatus
18F6 D6 04 80    20 8643                 Call    Abort
18F9                8644                 
18F9 70 E4          8645 Wr_Cmn_Ok:      Push    !r4
18FB                8646 
18FB 46 56 20    10 8647                 Or      DiskStat,#Wr_Op
18FE B0 E4        6 8648                 Clr     !r4
1900 D6 1D C9    20 8649                 Call    WriteBlock
1903 EB 3F          8650                 Jr      Nz,Wr_Cmn_End
1905                8651                 
1905 2C 20        6 8652                  Ld     !r2,#.HIBYTE. WrBuf_To_Buf2
1907 3C 65        6 8653                  Ld     !r3,#.LOWBYTE. WrBuf_To_Buf2
1909 D6 04 10    20 8654                 Call    Bank_Call
190C                8655                 
190C 4C 80        6 8656                 Ld      !r4,#Error ;ErrorCode := Error, Undetermined
190E                8657                 
190E 76 24 80    10 8658                 Tm      Excpt_Stat,#Recovery ;IF Recovery THEN ...
1911 6B 31          8659                 Jr      Z,Wr_Cmn_End
1913                8660                 
1913 5C 04        6 8661                 Ld      !r5,#4  ;Retry := 4
1915                8662                 
1915 2C 28        6 8663 Wr_Cmn_Lp:       Ld     !r2,#.HIBYTE. SrvoRcvry
1917 3C 9C        6 8664                  Ld     !r3,#.LOWBYTE. SrvoRcvry
1919 D6 04 10    20 8665                 Call    Bank_Call
191C                8666                 
191C 2C 20        6 8667                  Ld     !r2,#.HIBYTE. Buf2_To_WrBuf
191E 3C 70        6 8668                  Ld     !r3,#.LOWBYTE. Buf2_To_WrBuf
1920 D6 04 10    20 8669                 Call    Bank_Call
1923                8670                 
1923 D6 1D C9    20 8671                 Call    WriteBlock
1926 B0 E4        6 8672                 Clr     !r4
1928 EB 1A          8673                 Jr      Nz,Wr_Cmn_End
192A                8674                 
192A 5A E9          8675                 Djnz    !r5,Wr_Cmn_Lp
192C 4C 80        6 8676                 Ld      !r4,#Error
192E                8677                 
192E 76 28 40    10 8678 Wr_Cmn_Servo:   Tm      WrStat,#WrSrvoErr
1931 6B 0A          8679                 Jr      Z,Wr_Cmn_Hdr
1933                8680                 
1933 B0 E0        6 8681                  Clr    !r0 ;Byte 0
1935 1C 02        6 8682                  Ld     !r1,#Stat_Srvo





        WIDGET.ASSEM            Page 136
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1937 D6 03 83    20 8683                 Call    SetStatus
193A D6 04 80    20 8684                 Call    Abort
193D                8685                 
193D 76 28 10    10 8686 Wr_Cmn_Hdr:     Tm      WrStat,#WrNoHdrFnd
1940 6B 02          8687                 Jr      Z,Wr_Cmn_End
1942                8688                 
1942 4C 8A        6 8689                 Ld      !r4,#Error+Ex_HdrSpr
1944                8690                 
1944 08 E4        6 8691 Wr_Cmn_End:     Ld      !r0,!r4
1946 50 E4       10 8692                 Pop     !r4             ;retrieve register from stack
1948 66 E0 80    10 8693                 Tcm     !r0,#WrError
194B 8D 04 5F       8694                 Jp      Bank_Ret
194E                8695                 
194E                8696                 .LSTOFF
194E                8733                 .LSTON












































        WIDGET.ASSEM            Page 137
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


194E                8734                 .Page
194E                8735                 .FIN
194E                8736 
194E                8737 Sys_WrV:
194E E6 0A 24    10 8738                  Ld     Wrk_Io+$A,#Sys_WrVer_Resp
1951 8B 00          8739                 Jr      Pro_WrVer_2
1953                8740 
1953                8741 Pro_WrVer:
1953 E6 0A 04    10 8742                  Ld     Wrk_Io+$A,#WrVer_Response
1956 D6 18 A6    20 8743 Pro_WrV_2:      Call    Pro_Wr_SetUp
1959                8744 
1959 2C 20        6 8745                  Ld     !r2,#.HIBYTE. WrBuf_To_Buf2
195B 3C 65        6 8746                  Ld     !r3,#.LOWBYTE. WrBuf_To_Buf2
195D D6 04 10    20 8747                 Call    Bank_Call
1960                8748 
1960 76 5A 02    10 8749                 Tm      BlkStat,#B_Block ;IF BadBlock
1963 6B 05          8750                 Jr      Z,ProWrV_1
1965                8751                 
1965 D6 18 D3    20 8752                 Call    Wr_BBlock
1968 8B 08          8753                 Jr      WrVer_Leave
196A                8754                 
196A D6 19 75    20 8755 ProWrV_1:       Call    WrVer_Common
196D EB 03          8756                 Jr      Nz,WrVer_Leave
196F                8757                 
196F D6 16 C2    20 8758                 Call    Data_Ex_Handler
1972                8759                 
1972 8D 12 CB       8760 WrVer_Leave:    Jp      Rd_Leave
1975                8761 
1975                8762                 .LSTOFF
1975                8801                 .LSTON





























        WIDGET.ASSEM            Page 138
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1975                8802                 .Page
1975                8803                 .FIN
1975                8804 
1975                8805 WrVer_Common:
1975 D6 10 9E    20 8806                 Call    ExtPush_Vector
1978                8807                 
1978 46 56 20    10 8808                 Or      DiskStat,#Wr_Op
197B D6 18 E0    20 8809                 Call    Wr_Common
197E 6B 1D          8810                 Jr      Z,WrVer_Ret
1980                8811                 
1980 56 56 DF    10 8812                 And     DiskStat,#$FF-Wr_Op
1983 D6 13 03    20 8813                 Call    Read_Common
1986 EB 15          8814                 Jr      Nz,WrVer_Ret
1988                8815                 
1988 18 E0        6 8816                 Ld      !r1,!r0
198A 56 E1 7F    10 8817                 And     !r1,#$7F ;mask off error bit
198D                8818                 
198D A6 E1 08    10 8819                 Cp      !r1,#Ex_HdrBad
1990 2C 8A        6 8820                 Ld      !r2,#Error+Ex_HdrSpr
1992 6B 07          8821                 Jr      Z,WrV_ChgEx
1994                8822                 
1994 A6 E1 04    10 8823                 Cp      !r1,#Ex_BadBlock
1997 2C 82        6 8824                 Ld      !r2,#Error+Ex_SprBlock
1999 EB 02          8825                 Jr      Nz,WrVer_Ret
199B                8826                 
199B 08 E2        6 8827 WrV_Chg_Ex:     Ld      !r0,!r2
199D                8828                 
199D 70 E0          8829 WrVer_Ret:      Push    !r0
199F D6 10 A6    20 8830                 Call    ExtPop_Vector
19A2 50 E0       10 8831                 Pop     !r0
19A4 66 E0 80    10 8832                 Tcm     !r0,#Error ;set error condition
19A7 8D 04 5F       8833                 Jp      Bank_Ret
19AA                8834                 
19AA                8835                 .LSTOFF
19AA                8897                 .LSTON
























        WIDGET.ASSEM            Page 139
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


19AA                8898                 .Page
19AA                8899                 .FIN
19AA                8900 
19AA                8901 D_Read:
19AA D6 1E 6C    20 8902                 Call    ClrNormStat
19AD                8903                 
19AD E6 0A 0B    10 8904                  Ld     Wrk_Io+$A,#D_Read_Response
19B0 D6 02 8B    20 8905                 Call    Ack_Read
19B3                8906                 
19B3 E6 58 02    10 8907                 Ld      Data_Type,#User_Type
19B6 56 56 DF    10 8908                 And     DiskStat,#$FF-Wr_Op
19B9 D6 13 03    20 8909                 Call    Read_Common
19BC EB 05          8910                 Jr      Nz,D_Read_End
19BE                8911                 
19BE 0C 80        6 8912                  Ld     !r0,#Error
19C0 D6 16 C2    20 8913                 Call    Data_Ex_Handler
19C3                8914                 
19C3 8D 12 CB       8915 D_Read_End:     Jp      Rd_Leave
19C6                8916                 
19C6                8917                 .LSTOFF
19C6                8953                 .LSTON






































        WIDGET.ASSEM            Page 140
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


19C6                8954                 .Page
19C6                8955                 .FIN
19C6                8956 
19C6                8957 D_ReadHdr:
19C6 D6 1E 6C    20 8958                 Call    ClrNormStat
19C9                8959                 
19C9 E6 0A 0C    10 8960                  Ld     Wrk_Io+$A,#D_RdHdr_Response
19CC D6 02 8B    20 8961                 Call    Ack_Read
19CF                8962                 
19CF D6 1A F4    20 8963                 Call    Ld_Param1
19D2                8964                 
19D2 09 55        6 8965                 Ld      Sector,!r0 ;load new sector
19D4 2C 11        6 8966                  Ld     !r2,#.HIBYTE. LocateSector
19D6 3C 2B        6 8967                  Ld     !r3,#.LOWBYTE. LocateSector
19D8 D6 04 10    20 8968                 Call    Bank_Call
19DB                8969                 
19DB E6 58 02    10 8970                 Ld      Data_Type,#User_Type
19DE 56 56 DF    10 8971                 And     DiskStat,#$FF-Wr_Op
19E1                8972                 
19E1 2C 20        6 8973                  Ld     !r2,#.HIBYTE. ReadHdr
19E3 3C 07        6 8974                  Ld     !r3,#.LOWBYTE. ReadHdr
19E5 D6 04 10    20 8975                 Call    Bank_Call
19E8                8976                 
19E8 70 E0          8977                 Push    !r0 ;save status byte
19EA                8978                 
19EA 76 E0 40    10 8979                 Tm      !r0,#RdHSrvoErr ;IF ReadHdr.ServoErr
19ED 6B 07          8980                 Jr      Z,D_RdH_Crc
19EF                8981                 
19EF B0 E0        6 8982                  Clr    !r0 ;byte0
19F1 1C 02        6 8983                  Ld     !r1,#Stat_Srvo
19F3 D6 03 83    20 8984                 Call    SetStatus
19F6                8985                 
19F6 50 E0       10 8986 D_RdH_Crc:      Pop     !r0
19F8 76 E0 08    10 8987                 Tm      !r0,#RdCrcErr
19FB 6B 07          8988                 Jr      Z,D_RdH_End
19FD                8989                 
19FD B0 E0        6 8990                  Clr    !r0 ;byte 0
19FF 1C 08        6 8991                  Ld     !r1,#Stat_Rd_Err
1A01 D6 03 83    20 8992                 Call    SetStatus
1A04                8993                 
1A04 2C 14        6 8994 D_RdH_End:       Ld     !r2,#.HIBYTE. CStatus0
1A06 3C 95        6 8995                  Ld     !r3,#.LOWBYTE. CStatus0
1A08 EC 10        6 8996                  Ld     !rE,#.HIBYTE. RdH_Stat_Array
1A0A FC 08        6 8997                  Ld     !rF,#.LOWBYTE. RdH_Stat_Array
1A0C D6 1E A3    20 8998                 Call    Move4_B0
1A0F                8999                 
1A0F 31 00        6 9000                 Srp    #Wrk_Io
1A11 AC 01        6 9001                  Ld     !rA,#Init_Response
1A13 B0 EB        6 9002                  Clr    !rB
1A15 CC 10        6 9003                  Ld     !rC,#.HIBYTE. RdH_Stat_Array
1A17 DC 08        6 9004                  Ld     !rD,#.LOWBYTE. RdH_Stat_Array
1A19 8D 02 66       9005                 Jp      Clr_Bsy
1A1C                9006                 
1A1C                9007                 .LSTOFF





        WIDGET.ASSEM            Page 141
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1A1C                9038                 .LSTON


























































        WIDGET.ASSEM            Page 142
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1A1C                9039                 .Page
1A1C                9040                 .FIN
1A1C                9041 
1A1C                9042 D_Write:
1A1C D6 1E 6C    20 9043                 Call    ClrNormStat
1A1F                9044                 
1A1F E6 58 02    10 9045                 Ld      Data_Type,#User_Type
1A22 46 56 20    10 9046                 Or      DiskStat,#Wr_Op
1A25                9047                 
1A25 E6 0A 0D    10 9048                  Ld     Wrk_Io+$A,#D_Write_Response
1A28 D6 02 8A    20 9049                 Call    Get_Wr_Data
1A2B                9050                 
1A2B D6 18 E0    20 9051                 Call    Wr_Common
1A2E EB 05          9052                 Jr      Nz,D_Write_End
1A30                9053                 
1A30 0C 80        6 9054                  Ld     !r0,#Error
1A32 D6 16 C2    20 9055                 Call    Data_Ex_Handler
1A35                9056                 
1A35 8D 12 CB       9057 D_Write_End:    Jp      Rd_Leave
1A38                9058                 
1A38                9059                 .LSTOFF
1A38                9088                 .LSTON





































        WIDGET.ASSEM            Page 143
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1A38                9089                 .Page
1A38                9090                 .FIN
1A38                9091 
1A38                9092 Read_CStatus:
1A38 E6 0A 03    10 9093                  Ld     Wrk_Io+$A,#Rd_Stat_Response
1A3B D6 02 8B    20 9094                 Call    Ack_Read
1A3E                9095                 
1A3E EC 10        6 9096                 Ld      !rE,#.HIBYTE. StatusArray
1A40 FC 12        6 9097                 Ld      !rF,#.LOWBYTE. StatusArray
1A42                9098                 
1A42 D6 1A F4    20 9099                 Call    Ld_Param1
1A45                9100                 
1A45 56 E0 0F    10 9101                 And     !r0,#$0F ;mask off all but legal status request
1A48 A6 E0 07    10 9102                 Cp      !r0,#7 ;check for except case
1A4B AD 12 CB       9103                 Jp      Gt,Rd_Leave
1A4E                9104                 
1A4E 2C 1A        6 9105                 Ld      !r2,#.HIBYTE. Stat_Table
1A50 3C 61        6 9106                 Ld      !r3,#.LOWBYTE. Stat_Table
1A52 90 E0        6 9107                 Rl      !r0
1A54 02 30        6 9108                 Add     !r3,!r0
1A56 16 E2 00    10 9109                 Adc     !r2,#0
1A59 C2 C2       12 9110                 Ldc     !rC,@!!r2
1A5B A0 E2       10 9111                 Incw    !!r2
1A5D C2 D2       12 9112                 Ldc     !rD,@!!r2
1A5F 30 EC        8 9113                 Jp      @!rC
1A61                9114                 
1A61 12 CB          9115 Stat_Table:     .DW     Rd_Leave
1A63 1A 71          9116                 .DW     Ld_Stat1
1A65 1A 7C          9117                 .DW     Ld_Stat2
1A67 1A 86          9118                 .DW     Ld_Stat3
1A69 1A 8A          9119                 .DW     Ld_Stat4
1A6B 1A 94          9120                 .DW     Ld_Stat5
1A6D 1A A2          9121                 .DW     Ld_Stat6
1A6F 1A AC          9122                 .DW     Ld_Stat7
1A71                9123                 
1A71 A0 EE       10 9124 Ld_Stat1:       Incw    !!rE
1A73 2C 14        6 9125                 Ld      !r2,#.HIBYTE. LogicalBlock
1A75 3C A1        6 9126                 Ld      !r3,#.LOWBYTE. LogicalBlock
1A77 D6 1E A3    20 9127                 Call    Move4_B0
1A7A 8B 40          9128                 Jr      Ld_Stat_End
1A7C                9129                 
1A7C 0C 52        6 9130 Ld_Stat2:       Ld      !r0,#Cylinder
1A7E 1C 04        6 9131 Ld_Stat2_1:     Ld      !r1,#4 ;move 4 bytes
1A80 93 0E       18 9132 Ld_Stat2_Lp:    Ldei    @!!rE,@!r0
1A82 1A FC          9133                 Djnz    !r1,Ld_Stat2_Lp
1A84 8B 36          9134                 Jr      Ld_Stat_End
1A86                9135                 
1A86 0C 50        6 9136 Ld_Stat3:       Ld      !r0,#Cur_Cyl
1A88 8B F4          9137                 Jr      Ld_Stat2_1
1A8A                9138                 
1A8A 08 24        6 9139 Ld_Stat4:       Ld      !r0,Excpt_Status
1A8C 18 56        6 9140                 Ld      !r1,DiskStatus
1A8E 28 5A        6 9141                 Ld      !r2,BlkStat
1A90 38 58        6 9142                 Ld      !r3,Data_Type





        WIDGET.ASSEM            Page 144
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1A92 8B 20          9143                 Jr      Ld_Stat_Reg
1A94                9144                 
1A94 0C 00        6 9145 Ld_Stat5:       Ld      !r0,#0
1A96 18 25        6 9146                 Ld      !r1,SlfTst_Result
1A98 28 02        6 9147                 Ld      !r2,Port2
1A9A CC 1F        6 9148                 Ld      !rC,#.HIBYTE. Status_Port
1A9C DC 00        6 9149                 Ld      !rD,#.LOWBYTE. Status_Port
1A9E 82 3C       12 9150                 Lde     !r3,@!!rC
1AA0 8B 12          9151                 Jr      Ld_Stat_Reg
1AA2                9152                 
1AA2 08 26        6 9153 Ld_Stat6:       Ld      !r0,RdStat
1AA4 18 27        6 9154                 Ld      !r1,RdErrCnt
1AA6 28 28        6 9155                 Ld      !r2,WrStat
1AA8 38 29        6 9156                 Ld      !r3,WrErrCnt
1AAA 8B 08          9157                 Jr      Ld_Stat_Reg
1AAC                9158                 
1AAC 08 5C        6 9159 Ld_Stat7:       Ld      !r0,Lst_HiCyl
1AAE 18 5D        6 9160                 Ld      !r1,Lst_LoCyl
1AB0 28 5E        6 9161                 Ld      !r2,Lst_Head
1AB2 38 5F        6 9162                 Ld      !r3,Lst_Sector
1AB4                9163                 
1AB4 48 FD        6 9164 Ld_Stat_Reg:    Ld      !r4,Rp
1AB6 5C 04        6 9165                 Ld      !r5,#4 ;move 4 bytes
1AB8 93 4E       18 9166 Stat5_Lp:       Ldei    @!!rE,@!r4
1ABA 5A FC          9167                 Djnz    !r5,Stat5_Lp
1ABC                9168                 
1ABC E6 0A 01    10 9169 Ld_Stat_End:     Ld     Wrk_Io+$A,#Init_Response
1ABF B0 0B        6 9170                  Clr    Wrk_Io+$B
1AC1 8D 12 D3       9171                 Jp      Rd_Leave1
1AC4                9172 
1AC4                9173                 .LSTOFF
1AC4                9194                 .LSTON



























        WIDGET.ASSEM            Page 145
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1AC4                9195                 .Page
1AC4                9196                 .FIN
1AC4                9197 
1AC4                9198 Read_SStatus:
1AC4 D6 1E 6C    20 9199                 Call    ClrNormStat
1AC7                9200                 
1AC7 E6 0A 04    10 9201                  Ld     Wrk_Io+$A,#Rd_SStat_Response
1ACA D6 02 8B    20 9202                 Call    Ack_Read
1ACD                9203                 
1ACD D6 1A F4    20 9204                 Call    Ld_Param1
1AD0                9205                 
1AD0 D6 03 93    20 9206                 Call    Set_Dmt
1AD3 09 43        6 9207                  Ld     ScrReg3,!r0
1AD5 E6 40 00    10 9208                  Ld     ScrReg0,#ReadStatus
1AD8 E6 41 00    10 9209                  Ld     ScrReg1,#0
1ADB E6 42 00    10 9210                  Ld     ScrReg2,#0
1ADE 2C 27        6 9211                  Ld     !r2,#.HIBYTE. ServoStatus
1AE0 3C A5        6 9212                  Ld     !r3,#.LOWBYTE. ServoStatus
1AE2 D6 04 10    20 9213                 Call    Bank_Call
1AE5 D6 03 9F    20 9214                 Call    Clr_Dmt
1AE8                9215                 
1AE8 D6 12 E7    20 9216                 Call    Ld_Stand_Stat
1AEB                9217                 
1AEB 2C 14        6 9218                  Ld     !r2,#.HIBYTE. SStatus0
1AED 3C B6        6 9219                  Ld     !r3,#.LOWBYTE. SStatus0
1AEF D6 1E A3    20 9220                 Call    Move4_B0
1AF2                9221                 
1AF2 8B C8          9222                 Jr      Ld_Stat_End
1AF4                9223                 
1AF4                9224                 
1AF4 E4 FD 44    10 9225 Ld_Param1:      Ld      ScrReg4,Rp
1AF7 70 FD          9226                 Push    Rp
1AF9 31 40        6 9227                 Srp     #Wrk_Scr
1AFB                9228                 
1AFB EC 14        6 9229                 Ld      !rE,#.HIBYTE. ( CStatus4 + 2 )
1AFD FC A7        6 9230                 Ld      !rF,#.LOWBYTE. ( CStatus4 + 2 )
1AFF 5C 04        6 9231                 Ld      !r5,#4 ;load 4 bytes
1B01 83 4E       18 9232 Rd_SStat_Lp:    Ldei    @!r4,@!!rE
1B03 5A FC          9233                 Djnz    !r5,Rd_SStat_Lp
1B05                9234                 
1B05 50 FD       10 9235                 Pop     Rp ;get back to original context
1B07 AF          14 9236                 Ret
1B08                9237                 
1B08                9238                 .LSTOFF
1B08                9259                 .LSTON














        WIDGET.ASSEM            Page 146
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1B08                9260                 .Page
1B08                9261                 .FIN
1B08                9262 
1B08                9263 Send_ServoCmnd:
1B08 D6 1E 6C    20 9264                 Call    ClrNormStat
1B0B                9265                 
1B0B E6 0A 05    10 9266                  Ld     Wrk_Io+$A,#Sd_S_C_Response
1B0E D6 02 8B    20 9267                 Call    Ack_Read
1B11                9268                 
1B11 D6 1A F4    20 9269                 Call    Ld_Param1 ;get servo command
1B14 42 00        6 9270                 Or      !r0,!r0 ;check for Status Command
1B16 EB 03          9271                 Jr      Nz,S_Scmnd
1B18                9272                 
1B18 D6 04 80    20 9273                 Call    Abort
1B1B                9274                 
1B1B D6 03 93    20 9275 S_Scmnd:        Call    Set_Dmt
1B1E 09 40        6 9276                  Ld     ScrReg0,!r0
1B20 19 41        6 9277                  Ld     ScrReg1,!r1
1B22 29 42        6 9278                  Ld     ScrReg2,!r2
1B24 39 43        6 9279                  Ld     ScrReg3,!r3
1B26 2C 27        6 9280                  Ld     !r2,#.HIBYTE. ServoCmnd
1B28 3C 7F        6 9281                  Ld     !r3,#.LOWBYTE. ServoCmnd
1B2A D6 04 10    20 9282                 Call    Bank_Call
1B2D D6 03 9F    20 9283                 Call    Clr_Dmt
1B30                9284                 
1B30 8D 12 CB       9285                 Jp      Rd_Leave
1B33                9286                 
1B33                9287                 .LSTOFF
1B33                9308                 .LSTON






























        WIDGET.ASSEM            Page 147
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1B33                9309                 .Page
1B33                9310                 .FIN
1B33                9311 
1B33                9312 Send_Seek:
1B33 D6 1E 6C    20 9313                 Call    ClrNormStat
1B36                9314                 
1B36 E6 0A 06    10 9315                  Ld     Wrk_Io+$A,#S_Seek_Response
1B39 D6 02 8B    20 9316                 Call    Ack_Read
1B3C                9317                 
1B3C D6 1A F4    20 9318                 Call    Ld_Param1 ;get parameters from command processor
1B3F                9319                 
1B3F E6 57 80    10 9320                 Ld      Seek_Type,#Access
1B42                9321                 
1B42 C8 E0        6 9322                  Ld     !rC,!r0 ;pass params to Seek
1B44 D8 E1        6 9323                  Ld     !rD,!r1
1B46 E8 E2        6 9324                  Ld     !rE,!r2
1B48 F8 E3        6 9325                  Ld     !rF,!r3
1B4A D6 05 10    20 9326                 Call    New_Seek
1B4D 2C 29        6 9327                  Ld     !r2,#.HIBYTE. Set_SeekNeeded
1B4F 3C 56        6 9328                  Ld     !r3,#.LOWBYTE. Set_SeekNeeded
1B51 D6 04 10    20 9329                 Call    Bank_Call
1B54                9330                 
1B54 8D 12 CB       9331                 Jp      Rd_Leave
1B57                9332                 
1B57                9333                 .LSTOFF
1B57                9350                 .LSTON

































        WIDGET.ASSEM            Page 148
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1B57                9351                 .Page
1B57                9352                 .FIN
1B57                9353 
1B57                9354 Send_Restore:
1B57 D6 1E 6C    20 9355                 Call    ClrNormStat
1B5A                9356                 
1B5A E6 0A 07    10 9357                  Ld     Wrk_Io+$A,#S_Rstr_Response
1B5D D6 02 8B    20 9358                 Call    Ack_Read
1B60                9359                 
1B60 D6 1A F4    20 9360                 Call    Ld_Param1 ;get recal type
1B63 A6 E0 40    10 9361                 Cp      !r0,#DataRecal
1B66 6B 08          9362                 Jr      Z,S_Restore
1B68 A6 E0 70    10 9363                 Cp      !r0,#FrmtRecal
1B6B 6B 03          9364                 Jr      Z,S_Restore
1B6D                9365                 
1B6D D6 04 80    20 9366                 Call    Abort
1B70                9367                 
1B70 2C 28        6 9368 S_Restore:       Ld     !r2,#.HIBYTE. Restore
1B72 3C 2A        6 9369                  Ld     !r3,#.LOWBYTE. Restore
1B74 D6 04 10    20 9370                 Call    Bank_Call
1B77                9371                 
1B77 8D 12 CB       9372                 Jp      Rd_Leave
1B7A                9373                 
1B7A                9374                 .LSTOFF
1B7A                9394                 .LSTON


































        WIDGET.ASSEM            Page 149
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1B7A                9395                 .Page
1B7A                9396                 .FIN
1B7A                9397 
1B7A                9398 Set_Recovery:
1B7A D6 1E 6C    20 9399                 Call    ClrNormStat
1B7D                9400                 
1B7D E6 0A 08    10 9401                  Ld     Wrk_Io+$A,#Set_Rcvr_Response
1B80 D6 02 8B    20 9402                 Call    Ack_Read
1B83                9403                 
1B83 D6 1A F4    20 9404                 Call    Ld_Param1 ;get Set/Reset param
1B86                9405                 
1B86 46 24 80    10 9406                 Or      Excpt_Status,#Recovery ;assume True
1B89 42 00        6 9407                 Or      !r0,!r0 ;test for true or false
1B8B EB 03          9408                 Jr      Nz,Set_Rcvr_Store
1B8D                9409                 
1B8D 56 24 7F    10 9410                 And     Excpt_Status,#$FF-Recovery ;clear old bit
1B90                9411                 
1B90 8D 12 CB       9412 Set_Rcvr_Store: Jp      Rd_Leave
1B93                9413 
1B93                9414                 .LSTOFF
1B93                9442                 .LSTON






































        WIDGET.ASSEM            Page 150
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1B93                9443                 .Page
1B93                9444                 .FIN
1B93                9445 
1B93                9446 Send_Park:
1B93 D6 1E 6C    20 9447                 Call    ClrNormStat
1B96                9448                 
1B96 E6 0A 0A    10 9449                  Ld     Wrk_Io+$A,#S_Park_Response
1B99 D6 02 8B    20 9450                 Call    Ack_Read
1B9C                9451                 
1B9C 2C 28        6 9452                  Ld     !r2,#.HIBYTE. Park_Heads
1B9E 3C D0        6 9453                  Ld     !r3,#.LOWBYTE. Park_Heads
1BA0 D6 04 10    20 9454                 Call    Bank_Call
1BA3                9455                 
1BA3 8D 12 CB       9456                 Jp      Rd_Leave
1BA6                9457                 
1BA6                9458                 .LSTOFF
1BA6                9483                 .LSTON










































        WIDGET.ASSEM            Page 151
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1BA6                9484                 .Page
1BA6                9485                 .FIN
1BA6                9486 
1BA6                9487 Set_AutoOffset:
1BA6 D6 1E 6C    20 9488                 Call    ClrNormStat
1BA9                9489                 
1BA9 E6 0A 0E    10 9490                  Ld     Wrk_Io+$A,#St_AO_Response
1BAC D6 02 8B    20 9491                 Call    Ack_Read
1BAF                9492                 
1BAF 2C 26        6 9493                  Ld     !r2,#.HIBYTE. Auto_Offset
1BB1 3C EA        6 9494                  Ld     !r3,#.LOWBYTE. Auto_Offset
1BB3 D6 04 10    20 9495                 Call    Bank_Call
1BB6                9496                 
1BB6 8D 12 CB       9497                 Jp      Rd_Leave
1BB9                9498                 
1BB9                9499                 .LSTOFF
1BB9                9526                 .LSTON










































        WIDGET.ASSEM            Page 152
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1BB9                9527                 .Page
1BB9                9528                 .FIN
1BB9                9529 
1BB9                9530 Wr_SprTbl:
1BB9 E6 0A 10    10 9531                  Ld     Wrk_Io+$A,#Wr_Spr_Response
1BBC D6 02 8A    20 9532                 Call    Get_Wr_Data
1BBF                9533                 
1BBF D6 1E 6C    20 9534                  Call    ClrNormStat
1BC2                9535                 
1BC2 E6 42 14    10 9536                  Ld     ScrReg2,#.HIBYTE. ( CStatus4 + 2 )
1BC5 E6 43 A7    10 9537                  Ld     ScrReg3,#.LOWBYTE. ( CStatus4 + 2 )
1BC8 2C 24        6 9538                  Ld     !r2,#.HIBYTE. Chk_PassWord
1BCA 3C 30        6 9539                  Ld     !r3,#.LOWBYTE. Chk_PassWord
1BCC D6 04 10    20 9540                 Call    Bank_Call
1BCF EB 03          9541                 Jr      Nz,Wr_Spr1
1BD1                9542                 
1BD1 D6 04 80    20 9543                 Call    Abort
1BD4                9544                 
1BD4 2C 20        6 9545 Wr_Spr1:         Ld     !r2,#.HIBYTE. WrBuf_To_Spr
1BD6 3C 93        6 9546                  Ld     !r3,#.LOWBYTE. WrBuf_To_Spr
1BD8 D6 04 10    20 9547                 Call    Bank_Call
1BDB 2C 23        6 9548                  Ld     !r2,#.HIBYTE. UpDate_SprTbl
1BDD 3C 8A        6 9549                  Ld     !r3,#.LOWBYTE. UpDate_SprTbl
1BDF D6 04 10    20 9550                 Call    Bank_Call
1BE2                9551                 
1BE2 8D 12 CB       9552                 Jp      Rd_Leave
1BE5                9553                 
1BE5                9554                 .LSTOFF
1BE5                9593                 .LSTON






























        WIDGET.ASSEM            Page 153
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1BE5                9594                 .Page
1BE5                9595                 .FIN
1BE5                9596 
1BE5                9597 Format:
1BE5 E6 0A 11    10 9598                  Ld     Wrk_Io+$A,#Fmt_Response
1BE8 D6 02 8B    20 9599                 Call    Ack_Read
1BEB                9600                  
1BEB D6 1B FC    20 9601                 Call    Chk_FmtParms
1BEE                9602                  
1BEE 48 E0        6 9603                  Ld     !r4,!r0
1BF0 58 E1        6 9604                  Ld     !r5,!r1
1BF2 2C 10        6 9605                  Ld     !r2,#.HIBYTE. FormatTrack
1BF4 3C D3        6 9606                  Ld     !r3,#.LOWBYTE. FormatTrack
1BF6 D6 04 10    20 9607                 Call    Bank_Call
1BF9                9608                 
1BF9 8D 12 CB       9609                 Jp      Rd_Leave
1BFC                9610                 
1BFC                9611                 
1BFC D6 1E 6C    20 9612 Chk_FmtParms:   Call    ClrNormStat
1BFF                9613                 
1BFF E6 42 14    10 9614                  Ld     ScrReg2,#.HIBYTE. ( CStatus4+4 )
1C02 E6 43 A9    10 9615                  Ld     ScrReg3,#.LOWBYTE. ( CStatus4+4 )
1C05 2C 24        6 9616                  Ld     !r2,#.HIBYTE. Chk_PassWord
1C07 3C 30        6 9617                  Ld     !r3,#.LOWBYTE. Chk_PassWord
1C09 D6 04 10    20 9618                 Call    Bank_Call
1C0C EB 03          9619                 Jr      Nz,Format1
1C0E                9620                 
1C0E D6 04 80    20 9621                 Call    Abort
1C11                9622 
1C11 D6 1A F4    20 9623 Format1:        Call    Ld_Param1
1C14                9624 
1C14 76 E0 F0    10 9625                 Tm      !r0,#$F0 ;check for illegal offset
1C17 6B 07          9626                 Jr      Z,Fmt_Chk_Inter
1C19                9627                 
1C19 98 E0        6 9628 Format_Abort:    Ld     !r9,!r0
1C1B A8 E1        6 9629                  Ld     !rA,!r1
1C1D D6 04 80    20 9630                 Call    Abort
1C20                9631                 
1C20 A6 E1 06    10 9632 Fmt_Chk_Inter:  Cp      !r1,#Max_InterLeave
1C23 BB F4          9633                 Jr      Ugt,Format_Abort
1C25 AF          14 9634                 Ret
1C26                9635                 
1C26                9636                 .LSTOFF
1C26                9653                 .LSTON















        WIDGET.ASSEM            Page 154
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1C26                9654                 .Page
1C26                9655                 .FIN
1C26                9656 
1C26                9657 Read_Abort:
1C26 D6 1E 6C    20 9658                 Call    ClrNormStat
1C29                9659                 
1C29 E6 0A 13    10 9660                  Ld     Wrk_Io+$A,#Rd_Abrt_Response
1C2C D6 02 8B    20 9661                 Call    Ack_Read
1C2F                9662                 
1C2F 0C 16        6 9663                  Ld     !r0,#.HIBYTE. Abort_Stat
1C31 1C D8        6 9664                  Ld     !r1,#.LOWBYTE. Abort_Stat
1C33 2C 10        6 9665                  Ld     !r2,#.HIBYTE. RBuffer1
1C35 3C 19        6 9666                  Ld     !r3,#.LOWBYTE. RBuffer1
1C37 4C 80        6 9667                  Ld     !r4,#128 ;move 128 bytes
1C39                9668                  
1C39 82 50       12 9669 Rd_Abt_Lp:      Lde     !r5,@!!r0
1C3B 92 52       12 9670                 Lde     @!!r2,!r5
1C3D A0 E0       10 9671                 Incw    !!r0
1C3F A0 E2       10 9672                 Incw    !!r2
1C41 4A F6          9673                 Djnz    !r4,Rd_Abt_Lp
1C43                9674                 
1C43 8D 12 CB       9675                 Jp      Rd_Leave
1C46                9676                 
1C46                9677                 .LSTOFF
1C46                9695                 .LSTON


































        WIDGET.ASSEM            Page 155
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1C46                9696                 .Page
1C46                9697                 .FIN
1C46                9698 
1C46                9699 D_RstSrvo:
1C46 D6 1E 6C    20 9700                 Call    ClrNormStat
1C49                9701                  
1C49 E6 0A 14    10 9702                  Ld     Wrk_Io+$A,#RstSrvo_Response
1C4C D6 02 8B    20 9703                 Call    Ack_Read
1C4F                9704                 
1C4F 2C 28        6 9705                  Ld     !r2,#.HIBYTE. ResetServo
1C51 3C EA        6 9706                  Ld     !r3,#.LOWBYTE. ResetServo
1C53 D6 04 10    20 9707                 Call    Bank_Call
1C56                9708                 
1C56 8D 12 CB       9709                 Jp      Rd_Leave
1C59                9710                 
1C59                9711                 .LSTOFF
1C59                9730                 .LSTON










































        WIDGET.ASSEM            Page 156
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1C59                9731                 .Page
1C59                9732                 .FIN
1C59                9733 
1C59                9734 D_Init_SprTbl:
1C59 D6 1E 6C    20 9735                 Call    ClrNormStat
1C5C                9736                 
1C5C E6 0A 12    10 9737                  Ld     Wrk_Io+$A,#I_Spr_Response
1C5F D6 02 8B    20 9738                 Call    Ack_Read
1C62                9739                 
1C62 E6 42 14    10 9740                  Ld     ScrReg2,#.HIBYTE. ( CStatus4+4 )
1C65 E6 43 A9    10 9741                  Ld     ScrReg3,#.LOWBYTE. ( CStatus4+4 )
1C68 2C 24        6 9742                  Ld     !r2,#.HIBYTE. Chk_PassWord
1C6A 3C 30        6 9743                  Ld     !r3,#.LOWBYTE. Chk_PassWord
1C6C D6 04 10    20 9744                 Call    Bank_Call
1C6F EB 03          9745                 Jr      Nz,D_I_SprTbl
1C71                9746                 
1C71 D6 04 80    20 9747                 Call    Abort
1C74                9748                 
1C74 D6 1A F4    20 9749 D_I_SprTbl:     Call    Ld_Param1
1C77                9750                 
1C77 48 E0        6 9751                  Ld     !r4,!r0 ;pass offset value
1C79 58 E1        6 9752                  Ld     !r5,!r1 ;pass interleave value
1C7B 2C 21        6 9753                  Ld     !r2,#.HIBYTE. Init_SprTbl
1C7D 3C EA        6 9754                  Ld     !r3,#.LOWBYTE. Init_SprTbl
1C7F D6 04 10    20 9755                 Call    Bank_Call
1C82                9756                 
1C82 8D 12 CB       9757                 Jp      Rd_Leave
1C85                9758                 
1C85                9759                 .LSTOFF
1C85                9834                 .LSTON





























        WIDGET.ASSEM            Page 157
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1C85                9835                 .Page
1C85                9836                 .FIN
1C85                9837 
1C85                9838 Sys_Read:
1C85 E6 0A 22    10 9839                  Ld     Wrk_Io+$A,#Sys_Rd_Resp
1C88 D6 1C F4    20 9840                 Call    Sys_SetUp
1C8B                9841                 
1C8B                9842                 
1C8B E6 57 80    10 9843 Sys_Rd_Seek:     Ld     Seek_Type,#Access
1C8E 56 56 DF    10 9844                  And    DiskStat,#$FF-Wr_Op
1C91 D6 1D 2E    20 9845                 Call    Sys_Rw_Seek
1C94 D6 1E B2    20 9846                 Call    ReadBlock
1C97 EB 11          9847                 Jr      Nz,Sys_Rd_Next
1C99 8B 24          9848                 Jr      Sys_RdErr
1C9B                9849                 
1C9B D6 1D 3D    20 9850 Sys_Rd_Lp:      Call    Sys_Inc_Blk
1C9E EB EB          9851                 Jr      Nz,Sys_Rd_Seek
1CA0                9852                 
1CA0 56 E0 3F    10 9853                 And     !r0,#$3F ;mask off head value
1CA3 09 55        6 9854                 Ld      Sector,!r0
1CA5                9855 
1CA5 D6 1E D2    20 9856 Sys_Rd_OvrLp:   Call    Read_Fast
1CA8 6B 15          9857                 Jr      Z,Sys_Rd_Err
1CAA                9858 
1CAA 76 5A 02    10 9859 Sys_Rd_Next:    Tm      BlkStat,#B_Block ;check if bad block came back!
1CAD EB 29          9860                 Jr      Nz,Sys_Rd_BB
1CAF                9861                 
1CAF E6 0A 22    10 9862 Sys_Rd_N1:      Ld      Wrk_Io+$A,#Sys_Rd_Resp
1CB2 E6 0B C0    10 9863                 Ld      Wrk_Io+$B,#Cmnd_Pending+IBsy
1CB5 4A 03          9864                 Djnz    !r4,Sys_Rd_More
1CB7                9865                 
1CB7 8D 12 CB       9866                 Jp      Rd_Leave
1CBA                9867                 
1CBA D6 02 6D    20 9868 Sys_Rd_More:    Call    Sys_Exit
1CBD 8B DC          9869                 Jr      Sys_Rd_Lp
1CBF                9870                 























        WIDGET.ASSEM            Page 158
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1CBF                9871                 .Page
1CBF                9872                 
1CBF 70 E4          9873 Sys_RdErr:      Push    !r4     ;save block count
1CC1 D6 13 03    20 9874                 Call    Read_Common ;retry for exception handling
1CC4 50 E4       10 9875 Sys_RErr1:      Pop     !r4     ;get block count
1CC6 70 FC          9876                 Push    Flags   ;save result
1CC8 70 E0          9877                 Push    !r0     ;save return code
1CCA D6 05 46    20 9878                 Call    Load_Logical ;restore block number sequence
1CCD 50 E0       10 9879                 Pop     !r0
1CCF 50 FC       10 9880                 Pop     Flags
1CD1 EB D7          9881                 Jr      Nz,Sys_Rd_Next
1CD3                9882                 
1CD3 D6 16 C2    20 9883                 Call    Data_Ex_Handler
1CD6 8B 07          9884                 Jr      Sys_Chk_Ftl
1CD8                9885 
1CD8 70 E4          9886 Sys_Rd_BB:      Push    !r4             ;save block count
1CDA D6 12 DC    20 9887                 Call    Pro_Rd_BB
1CDD 8B E5          9888                 Jr      Sys_RErr1
1CDF                9889 
1CDF D6 1C EA    20 9890 Sys_Chk_Ftl:    Call    Chk_FatalStat
1CE2 ED 12 CB       9891                 Jp      Nz,Rd_Leave     ;get out if fatal error
1CE5                9892                 
1CE5 D6 1E 6C    20 9893                 Call    ClrNormStat
1CE8 8B C5          9894                 Jr      Sys_Rd_N1
1CEA                9895 
1CEA 2C 14        6 9896 Chk_FatalStat:  Ld      !r2,#.HIBYTE. CStatus0
1CEC 3C 95        6 9897                 Ld      !r3,#.LOWBYTE. CStatus0
1CEE 82 02       12 9898                 Lde     !r0,@!!r2               ;get 1st byte of standard stat
1CF0 76 E0 01    10 9899                 Tm      !r0,#Op_Failed          ;check if operation failed
1CF3 AF          14 9900                 Ret
1CF4                9901 
1CF4                9902 
1CF4 D6 02 8B    20 9903 Sys_SetUp:      Call    Ack_Read
1CF7                9904                  
1CF7 D6 1E 6C    20 9905                 Call    ClrNormStat
1CFA                9906                 
1CFA 0C 03        6 9907                  Ld     !r0,#Sys_Log_Offset
1CFC D6 05 87    20 9908                 Call    Ld_LgclBlk
1CFF                9909                 
1CFF D6 1A F4    20 9910                 Call    Ld_Param1
1D02 42 00        6 9911                 Or      !r0,!r0 ;check for zero count
1D04 EB 03          9912                 Jr      Nz,Sys_Set1
1D06                9913                 
1D06 D6 04 80    20 9914                 Call    Abort
1D09                9915                 
1D09 48 E0        6 9916 Sys_Set1:       Ld      !r4,!r0 ;Count := ...
1D0B                9917 
1D0B D6 05 46    20 9918                 Call    Load_Logical
1D0E 08 E4        6 9919                 Ld      !r0,!r4
1D10 00 E0        6 9920                 Dec     !r0 ;account for numbering 1..n
1D12 02 E0        6 9921                 Add     !rE,!r0
1D14 16 ED 00    10 9922                 Adc     !rD,#0
1D17 16 EC 00    10 9923                 Adc     !rC,#0
1D1A 2C 21        6 9924                  Ld     !r2,#.HIBYTE. Get_Type_Check





        WIDGET.ASSEM            Page 159
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1D1C 3C D2        6 9925                  Ld     !r3,#.LOWBYTE. Get_Type_Check
1D1E D6 04 10    20 9926                 Call    Bank_Call
1D21                9927                 
1D21 D6 05 46    20 9928                 Call    Load_Logical
1D24                9929                 
1D24 E6 58 02    10 9930                 Ld      Data_Type,#User_Type
1D27                9931                 
1D27 E6 0C 10    10 9932                 Ld      Wrk_Io+$C,#.HIBYTE. WBuffer1 ;get ready for more writes
1D2A E6 0D 21    10 9933                 Ld      Wrk_Io+$D,#.LOWBYTE. WBuffer1
1D2D                9934                 
1D2D AF          14 9935                 Ret
1D2E                9936                 
1D2E 70 E4          9937 Sys_Rw_Seek:     Push   !r4 ;save state
1D30 2C 1F        6 9938                  Ld     !r2,#.HIBYTE. OverLap
1D32 3C 92        6 9939                  Ld     !r3,#.LOWBYTE. OverLap
1D34 D6 04 10    20 9940                 Call    Bank_Call
1D37 50 E4       10 9941                  Pop    !r4
1D39 D6 05 46    20 9942                 Call    Load_Logical
1D3C AF          14 9943                 Ret
1D3D                9944                  
1D3D 06 EE 01    10 9945 Sys_Inc_Blk:    Add     !rE,#$01 ;BlockNumber := BlockNumber + 1
1D40 16 ED 00    10 9946                 Adc     !rD,#0
1D43 16 EC 00    10 9947                 Adc     !rC,#0
1D46 2C 14        6 9948                  Ld     !r2,#.HIBYTE. LogicalBlock
1D48 3C A1        6 9949                  Ld     !r3,#.LOWBYTE. LogicalBlock
1D4A 1C 03        6 9950                  Ld     !r1,#3
1D4C 0C 1C        6 9951                  Ld     !r0,#Wrk_Sys+$0C
1D4E 93 02       18 9952 Sys_Inc_Lp:     Ldei    @!!r2,@!r0
1D50 1A FC          9953                 Djnz    !r1,Sys_Inc_Lp
1D52                9954                 
1D52 D6 16 6F    20 9955                 Call    Srch_Cache      ;get the new physical adr
1D55 76 5A C0    10 9956                 Tm      BlkStat,#CachSeek+CachHdChg ;check for Head change
1D58 AF          14 9957                 Ret
1D59                9958                 
1D59                9959                 .LSTOFF
1D59               10023                 .LSTON























        WIDGET.ASSEM            Page 160
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1D59               10024                 .Page
1D59               10025                 .FIN
1D59               10026 
1D59               10027 Sys_Write:
1D59 E6 0A 23    1010028                  Ld     Wrk_Io+$A,#Sys_Wr_Resp
1D5C D6 1C F4    2010029                 Call    Sys_SetUp
1D5F               10030                 
1D5F E6 57 90    1010031 Sys_Wr_Seek:     Ld     Seek_Type,#Access+Offset
1D62 46 56 20    1010032                  Or     DiskStat,#Wr_Op
1D65 D6 1D 2E    2010033                 Call    Sys_Rw_Seek
1D68 76 5A 02    1010034                 Tm      BlkStat,#B_Block ;check if bad block
1D6B EB 57         10035                 Jr      Nz,Sys_Wr_BB
1D6D               10036                 
1D6D D6 1D C9    2010037                 Call    WriteBlock
1D70 EB 1C         10038                 Jr      Nz,Sys_Wr_Next
1D72 8B 39         10039                 Jr      Sys_WrErr
1D74               10040                 
1D74 D6 1D 3D    2010041 Sys_Wr_Lp:      Call    Sys_Inc_Blk
1D77 EB E6         10042                 Jr      Nz,Sys_Wr_Seek
1D79               10043                 
1D79 76 56 01    1010044                 Tm      DiskStat,#Offset_On ;check for offset on all writes
1D7C 6B E1         10045                 Jr      Z,Sys_Wr_Seek
1D7E               10046                 
1D7E 56 E0 3F    1010047                 And     !r0,#$3F ;mask off head value
1D81 09 55        610048                 Ld      Sector,!r0
1D83               10049 
1D83 76 5A 02    1010050 Sys_Wr_OvrLp:   Tm      BlkStat,#B_Block ;check if bad block
1D86 ED 1D C4*43   10051                 Jp      Nz,Sys_Wr_BB
1D89               10052                 
1D89 D6 1D ED    2010053                 Call    Write_Fast
1D8C 6B 1F         10054                 Jr      Z,Sys_WrErr
1D8E               10055                 
1D8E E6 0A 23    1010056 Sys_Wr_Next:    Ld      Wrk_Io+$A,#Sys_Wr_Resp
1D91 E6 0B E0    1010057                 Ld      Wrk_Io+$B,#Cmnd_Pending+IBsy+MultiWr
1D94 E6 0C 10    1010058                 Ld      Wrk_Io+$C,#.HIBYTE. WBuffer1
1D97 E6 0D 21    1010059                 Ld      Wrk_Io+$D,#.LOWBYTE. WBuffer1
1D9A 4A 0C         10060                 Djnz    !r4,Sys_Wr_More
1D9C               10061                 
1D9C E6 0A 27    1010062                  Ld     Wrk_Io+$A,#Sys_WrEnd_Resp
1D9F E6 0B 00    1010063 Sys_Wr_HS:       Ld     Wrk_Io+$B,#0
1DA2 D6 12 D0    2010064                 Call    Rd_Leave2
1DA5 8D 12 CB      10065                 Jp      Rd_Leave
1DA8               10066                 
1DA8 D6 02 6D    2010067 Sys_Wr_More:    Call    Sys_Exit
1DAB 8B C7         10068                 Jr      Sys_Wr_Lp
1DAD               10069                 
1DAD               10070                 
1DAD D6 18 E0    2010071 Sys_WrErr:      Call    Wr_Common ;retry for exception handling
1DB0 EB DC         10072                 Jr      Nz,Sys_Wr_Next
1DB2               10073                 
1DB2 D6 16 C2    2010074                 Call    Data_Ex_Handler
1DB5 D6 1C EA    2010075 Sys_WrChk:      Call    Chk_FatalStat
1DB8 EB 05         10076                 Jr      Nz,Sys_WrE1
1DBA               10077                 





        WIDGET.ASSEM            Page 161
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1DBA D6 1E 6C    2010078                 Call    ClrNormStat
1DBD 8B CF         10079                 Jr      Sys_Wr_Next
1DBF               10080 
1DBF E6 0A A3    1010081 Sys_WrE1:       Ld      Wrk_Io+$A,#Sys_WrEx_Resp
1DC2 8B DB         10082                 Jr      Sys_Wr_HS
1DC4               10083 
1DC4 D6 18 D3    2010084 Sys_Wr_BB:      Call    Wr_BBlock
1DC7 8B EC         10085                 Jr      Sys_WrChk
1DC9               10086                 
1DC9               10087                 .LSTOFF
1DC9               10203                 .LSTON
















































        WIDGET.ASSEM            Page 162
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1DC9               10204                 .Page
1DC9               10205                 .FIN
1DC9               10206                 
1DC9               10207 WriteBlock:
1DC9 B0 E9        610208                 Clr     !r9     ;clear booleans
1DCB 8C 0A        610209                 Ld      !r8,#10 ;WrRetryCnt := 10
1DCD B0 EB        610210                 Clr     !rB     ;ErrCnt := 0
1DCF 46 56 20    1010211                 Or      DiskStat,#Wr_Op ;make certain we are writing
1DD2               10212                  
1DD2 2C 10        610213 WrBlk_Rpt:       Ld     !r2,#.HIBYTE. WHeader ;initialize gaps
1DD4 3C 0B        610214                  Ld     !r3,#.LOWBYTE. WHeader
1DD6 D6 05 1A    2010215                 Call    Load_Header
1DD9               10216 
1DD9 0C 00        610217                 Ld      !r0,#0
1DDB 1C 0E        610218                 Ld      !r1,#( WDataSync - WDataGap )
1DDD 92 02       1210219 WrGap_Lp:       Lde     @!!r2,!r0
1DDF 3E           610220                 Inc     !r3
1DE0 1A FB         10221                 Djnz    !r1,WrGap_Lp
1DE2               10222                 
1DE2 0C 01        610223                 Ld      !r0,#01
1DE4 92 02       1210224                 Lde     @!!r2,!r0       ;first byte of sync
1DE6 3E           610225                 Inc     !r3
1DE7 0C 00        610226                 Ld      !r0,#$00
1DE9 92 02       1210227                 Lde     @!!r2,!r0       ;second byte of sync
1DEB 8B 1E         10228                 Jr      Do_Write
1DED               10229 
1DED B0 E9        610230 Write_Fast:     Clr     !r9     ;clear booleans
1DEF 8C 0A        610231                 Ld      !r8,#10 ;WrRetryCnt := 10
1DF1 B0 EB        610232                 Clr     !rB     ;ErrCnt := 0
1DF3 46 56 20    1010233                 Or      DiskStat,#Wr_Op ;make certain we are writing
1DF6               10234                  
1DF6 2C 10        610235                 Ld      !r2,#.HIBYTE. ( WHeader+2 ) ;get Sector location
1DF8 3C 0D        610236                 Ld      !r3,#.LOWBYTE. ( WHeader+2 )
1DFA 82 02       1210237                 Lde     !r0,@!!r2 ;get current Head/Sector Value
1DFC 56 E0 C0    1010238                 And     !r0,#$C0 ;mask ols sector value
1DFF 44 55 E0    1010239                 Or      !r0,Sector ;merge new sector value
1E02 92 02       1210240                 Lde     @!!r2,!r0 ;store it in header
1E04 06 E3 03    1010241                 Add     !r3,#3 ;get location of Inverse Sector
1E07 60 E0        610242                 Com     !r0
1E09 92 02       1210243                 Lde     @!!r2,!r0 ;and store it!
1E0B               10244                 
1E0B D6 02 8C    2010245 Do_Write:       Call    Wr_Resident     ;go internal to the Z8
1E0E               10246 
1E0E 18 E0        610247                 Ld      !r1,!r0         ;CASE Status.State
1E10 56 E1 0F    1010248                 And     !r1,#$0F
1E13 42 AA        610249                 Or      !rA,!rA
1E15 6B 3F         10250                 Jr      Z,WrBlk_NoHdr
1E17 A6 E1 02    1010251                 Cp      !r1,#Norm_State
1E1A EB 32         10252                 Jr      Nz,WrBlk_AbNorm
1E1C               10253                 
1E1C 46 E9 20    1010254 WrBlk_Norm:     Or      !r9,#WrSuccess
1E1F               10255 
1E1F 18 E0        610256                 Ld      !r1,!r0         ;IF ServorErr OR NOT( ServoRdy )
1E21 76 E1 10    1010257                 Tm      !r1,#ServoErr





        WIDGET.ASSEM            Page 163
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1E24 EB 3B         10258                 Jr      Nz,Wr_ServoErr
1E26 76 E1 20    1010259                 Tm      !r1,#ServoRdy
1E29 6B 36         10260                 Jr      Z,Wr_ServoErr
1E2B               10261                 
1E2B 76 E0 40    1010262 Wr_ServoOk:     Tm      !r0,#WrtNvldL    ;IF Status.WrtNtVldL
1E2E 6B 36         10263                 Jr      Z,WrBlk_NVld
1E30               10264                 
1E30 56 E9 7F    1010265                 And     !r9,#$FF-WrError
1E33               10266                 
1E33 76 24 80    1010267 WrBlk_Until:    Tm      Excpt_Status,#Recovery
1E36 6B 07         10268                 Jr      Z,WrBlk_End
1E38 76 E9 80    1010269                 Tm      !r9,#WrError
1E3B 6B 02         10270                 Jr      Z,WrBlk_End
1E3D 8A 0A         10271                 Djnz    !r8,WrB_Rpt1
1E3F               10272                 
1E3F B9 29        610273 WrBlk_End:      Ld      WrErrCnt,!rB
1E41 08 E9        610274                 Ld      !r0,!r9 ;send status back to caller
1E43 99 28        610275                 Ld      WrStat,!r9
1E45 66 E0 80    1010276                 Tcm     !r0,#WrError ;set zero flag if error
1E48 AF          1410277                 Ret
1E49               10278                 
1E49               10279                 
1E49 D6 06 58    2010280 WrB_Rpt1:       Call    ZeroHeader
1E4C 8B 84         10281                 Jr      WrBlk_Rpt
1E4E               10282                 
1E4E D6 04 E7    2010283 WrBlk_AbNorm:    Call   Reset_StMach
1E51 A8 E0        610284                  Ld     !rA,!r0
1E53 D6 04 80    2010285                 Call    Abort
1E56               10286                 
1E56 56 E9 DF    1010287 WrBlk_NoHdr:    And     !r9,#$FF-WrSuccess
1E59 46 E9 90    1010288 Wr_HdrErr:      Or      !r9,#WrNoHdrFnd + WrError
1E5C 46 EB 20    1010289                 Or      !rB,#Hdr_MisMatch
1E5F 8B DE         10290                 Jr      WrBlk_End
1E61               10291                 
1E61 46 E9 C0    1010292 Wr_ServoErr:    Or      !r9,#WrError + WrSrvoErr ; THEN WrError AND WrSrvoErr
1E64 8B D9         10293                 Jr      WrBlk_End
1E66               10294                 
1E66 46 E9 80    1010295 WrBlk_NVld:     Or      !r9,#WrError    ; ELSE
1E69 BE           610296                 Inc     !rB
1E6A 8B C7         10297                 Jr      WrBlk_Until
1E6C               10298                 
1E6C               10299                 .LSTOFF
1E6C               10352                 .LSTON
















        WIDGET.ASSEM            Page 164
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1E6C               10353                 .Page
1E6C               10354                 .FIN
1E6C               10355 
1E6C               10356 ClrNormStat:
1E6C 2C 14        610357                 Ld      !r2,#.HIBYTE. CStatus0
1E6E 3C 95        610358                 Ld      !r3,#.LOWBYTE. CStatus0
1E70 B0 E0        610359                 Clr     !r0
1E72 1C 04        610360                 Ld      !r1,#( CStatus1 - CStatus0 ) ;clear all status bytes
1E74               10361                 
1E74 92 02       1210362 Clr_N_Stat:     Lde     @!!r2,!r0
1E76 A0 E2       1010363                 Incw    !!r2
1E78 1A FA         10364                 Djnz    !r1,Clr_N_Stat
1E7A               10365                 
1E7A D6 06 58    2010366                 Call    ZeroHeader
1E7D               10367                 
1E7D 76 24 40    1010368                 Tm      Excpt_Stat,#SprTbl_Warn
1E80 6B 03         10369                 Jr      Z,Clr_N_PwrRst
1E82               10370                 
1E82 D6 04 E1    2010371                 Call    SS_SprWarn
1E85               10372                 
1E85 76 24 10    1010373 Clr_N_PwrRst:   Tm      Excpt_Stat,#PwrRst
1E88 6B 0A         10374                 Jr      Z,Clr_N_SlfTst
1E8A               10375                 
1E8A 0C 02        610376                  Ld     !r0,#2 ;byte 2
1E8C 1C 80        610377                  Ld     !r1,#Power_Reset
1E8E D6 03 83    2010378                 Call    SetStatus
1E91 56 24 EF    1010379                 And     Excpt_Stat,#$FF-PwrRst
1E94               10380                 
1E94 44 25 25    1010381 Clr_N_SlfTst:   Or      SlfTst_Result,SlfTst_Result
1E97 6B 07         10382                 Jr      Z,Clr_N_Leave
1E99               10383                 
1E99 0C 01        610384                  Ld     !r0,#01 ;byte 1
1E9B 1C 08        610385                  Ld     !r1,#Stat_SlfTst
1E9D D6 03 83    2010386                 Call    SetStatus
1EA0               10387                 
1EA0 8D 04 5F      10388 Clr_N_Leave:    Jp      Bank_Ret
1EA3               10389 
1EA3               10390                 .LSTOFF
1EA3               10418                 .LSTON




















        WIDGET.ASSEM            Page 165
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1EA3               10419                 .Page
1EA3               10420                 .FIN
1EA3               10421 
1EA3               10422 Move4_B0:
1EA3 1C 04        610423                 Ld      !r1,#4
1EA5 82 02       1210424 Move4_B0_Lp:    Lde     !r0,@!!r2
1EA7 92 0E       1210425                 Lde     @!!rE,!r0
1EA9 A0 E2       1010426                 Incw    !!r2
1EAB A0 EE       1010427                 Incw    !!rE
1EAD 1A F6         10428                 Djnz    !r1,Move4_B0_Lp
1EAF               10429                 
1EAF 8D 04 5F      10430                 Jp      Bank_Ret
1EB2               10431                 
1EB2               10432                 .LSTOFF
1EB2               10554                 .LSTON












































        WIDGET.ASSEM            Page 166
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1EB2               10555                 .Page
1EB2               10556                 .FIN
1EB2               10557                 
1EB2               10558 ReadBlock:
1EB2 B0 E9        610559                 Clr     !r9     ;clear booleans
1EB4 8C 0A        610560                 Ld      !r8,#10 ;RdRetryCnt := 10
1EB6 B0 EB        610561                 Clr     !rB     ;ErrCnt := 0
1EB8 56 56 DF    1010562                 And     DiskStat,#$FF-Wr_Op ;make certain we are reading
1EBB               10563 
1EBB 2C 10        610564 RdBlk_Rpt:       Ld     !r2,#.HIBYTE. RHeader ;initialize gaps
1EBD 3C 0B        610565                  Ld     !r3,#.LOWBYTE. RHeader
1EBF D6 05 1A    2010566                 Call    Load_Header
1EC2 0C 00        610567                 Ld      !r0,#0
1EC4 92 02       1210568                 Lde     @!!r2,!r0
1EC6               10569                 
1EC6 2C 10        610570                 Ld      !r2,#.HIBYTE. ( RDummy-1 )
1EC8 3C 17        610571                 Ld      !r3,#.LOWBYTE. ( RDummy-1 )
1ECA 92 02       1210572                 Lde     @!!r2,!r0
1ECC A0 E2       1010573                 Incw    !!r2
1ECE 92 02       1210574                 Lde     @!!r2,!r0
1ED0 8B 1E         10575                 Jr      Do_Read
1ED2               10576                 
1ED2 B0 E9        610577 Read_Fast:      Clr     !r9     ;clear booleans
1ED4 8C 0A        610578                 Ld      !r8,#10 ;RdRetryCnt := 10
1ED6 B0 EB        610579                 Clr     !rB     ;ErrCnt := 0
1ED8 56 56 DF    1010580                 And     DiskStat,#$FF-Wr_Op ;make certain we are reading
1EDB               10581                 
1EDB 2C 10        610582                 Ld      !r2,#.HIBYTE. ( RHeader+2 ) ;get location of Sector
1EDD 3C 0D        610583                 Ld      !r3,#.LOWBYTE. ( RHeader+2 )
1EDF 82 02       1210584                 Lde     !r0,@!!r2 ;get current Head/Sector value
1EE1 56 E0 C0    1010585                 And     !r0,#$C0 ;mask out old sector value
1EE4 44 55 E0    1010586                 Or      !r0,Sector ;merge in new sector
1EE7 92 02       1210587                 Lde     @!!r2,!r0 ;and store it
1EE9 06 E3 03    1010588                 Add     !r3,#3 ;get location of Inverse Head/Sector
1EEC 60 E0        610589                 Com     !r0
1EEE 92 02       1210590                 Lde     @!!r2,!r0 ;and store it, too!
1EF0               10591                 
1EF0 D6 02 C6    2010592 Do_Read:        Call    Rd_Resident     ;go internal to the Z8
1EF3               10593 
1EF3 18 E0        610594                 Ld      !r1,!r0         ;CASE Status.State
1EF5 56 E1 0F    1010595                 And     !r1,#$0F
1EF8 42 AA        610596                 Or      !rA,!rA
1EFA 6B 45         10597                 Jr      Z,RdBlk_NoHdr
1EFC A6 E1 02    1010598                 Cp      !r1,#Norm_State
1EFF EB 38         10599                 Jr      Nz,RdBlk_AbNorm
1F01               10600                 
1F01 46 E9 20    1010601 RdBlk_Norm:     Or      !r9,#RdSuccess
1F04               10602 
1F04 18 E0        610603                 Ld      !r1,!r0         ;IF ServorErr OR NOT( ServoRdy )
1F06 76 E1 10    1010604                 Tm      !r1,#ServoErr
1F09 EB 53         10605                 Jr      Nz,Rd_ServoErr
1F0B 76 E1 20    1010606                 Tm      !r1,#ServoRdy
1F0E 6B 4E         10607                 Jr      Z,Rd_ServoErr
1F10               10608                 





        WIDGET.ASSEM            Page 167
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1F10 76 E0 80    1010609 Rd_ServoOk:     Tm      !r0,#CrcErrL    ;IF Status.CrcErr
1F13 6B 4E         10610                 Jr      Z,Rd_BadCrc
1F15 76 E0 40    1010611                 Tm      !r0,#WrtNvldL   ; OR Status.EccErr
1F18 6B 69         10612                 Jr      Z,Rd_BadEcc
1F1A               10613                 
1F1A 76 E9 80    1010614 Rd_NoCrcErr:    Tm      !r9,#RdError    ; THEN IF RdError
1F1D EB 6A         10615                 Jr      Nz,RdBlk_Bmove
1F1F               10616                 
1F1F 76 24 80    1010617 RdBlk_Until:    Tm      Excpt_Status,#Recovery
1F22 6B 05         10618                 Jr      Z,RdBlk_End
1F24 76 E9 80    1010619                 Tm      !r9,#RdError
1F27 EB 0A         10620                 Jr      Nz,RdB_Rpt1
1F29               10621                 
1F29 B9 27        610622 RdBlk_End:      Ld      RdErrCnt,!rB
1F2B 08 E9        610623                 Ld      !r0,!r9 ;send status back to caller
1F2D 99 26        610624                 Ld      RdStat,!r9
1F2F               10625                 
1F2F 66 E0 80    1010626                 Tcm     !r0,#RdError ;set zero flag if error
1F32 AF          1410627                 Ret
1F33               10628                 
1F33               10629 
1F33 D6 06 58    2010630 RdB_Rpt1:       Call    ZeroHeader
1F36 8D 1E BB*03   10631                 Jp      RdBlk_Rpt
1F39               10632                 
1F39 D6 04 E7    2010633 RdBlk_AbNorm:    Call   Reset_StMach
1F3C A8 E0        610634                  Ld     !rA,!r0
1F3E D6 04 80    2010635                 Call    Abort
1F41               10636                 
1F41 56 E9 DF    1010637 RdBlk_NoHdr:    And     !r9,#$FF-RdSuccess
1F44 46 E9 80    1010638                 Or      !r9,#Error
1F47 76 EB 20    1010639                 Tm      !rB,#Hdr_MisMatch
1F4A EB 0D         10640                 Jr      Nz,Rd_HdrErr
1F4C 46 EB 20    1010641                 Or      !rB,#Hdr_MisMatch
1F4F               10642                 
1F4F 76 24 80    1010643                 Tm      Excpt_Stat,#Recovery ;auto offset ONLY if recovery on
1F52 6B CB         10644                 Jr      Z,RdBlk_Until
1F54               10645                 
1F54 D6 05 03    2010646                 Call    ReSeek              ;set auto_offset
1F57 8B C6         10647                 Jr      RdBlk_Until
1F59               10648                 
1F59 46 E9 90    1010649 Rd_HdrErr:      Or      !r9,#RdNoHdrFnd + RdError
1F5C 8B CB         10650                 Jr      RdBlk_End
1F5E               10651                 
1F5E 46 E9 C0    1010652 Rd_ServoErr:    Or      !r9,#RdError + RdSrvoErr ; THEN RdError AND RdServoErr
1F61 8B C6         10653                 Jr      RdBlk_End
1F63               10654                 
1F63 46 E9 88    1010655 Rd_BadCrc:      Or      !r9,#RdError+RdCrcErr    ; ELSE
1F66 BE           610656                 Inc     !rB
1F67 46 EB 40    1010657                 Or      !rB,#CrcStat
1F6A 76 E0 40    1010658                 Tm      !r0,#WrtNvldL   ;check for Ecc error too
1F6D EB 10         10659                 Jr      Nz,Rd_B_Crc_1
1F6F 46 EB 80    1010660 RD_Bad1:        Or      !rB,#EccStat
1F72               10661                 
1F72 76 24 80    1010662                 Tm      Excpt_Stat,#Recovery    ;ReSeek only if recovery is on





        WIDGET.ASSEM            Page 168
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1F75 6B 08         10663                 Jr      Z,Rd_B_Crc_1
1F77               10664                 
1F77 76 56 01    1010665                 Tm      DiskStat,#Offset_On ;set auto offset if needed
1F7A EB 03         10666                 Jr      Nz,Rd_B_Crc_1
1F7C               10667                 
1F7C D6 05 03    2010668                 Call    ReSeek
1F7F               10669 
1F7F 8A 9E         10670 Rd_B_Crc_1:     Djnz    !r8,RdBlk_Until
1F81 8B A6         10671                 Jr      RdBlk_End
1F83               10672                 
1F83 46 E9 88    1010673 Rd_BadEcc:      Or      !r9,#RdError+RdCrcErr
1F86 BE           610674                 Inc     !rB
1F87 8B E6         10675                 Jr      Rd_Bad1
1F89               10676                 
1F89 2C 20        610677 RdBlk_Bmove:     Ld     !r2,#.HIBYTE. RBuf_To_Buf2
1F8B 3C 99        610678                  Ld     !r3,#.LOWBYTE. RBuf_To_Buf2
1F8D D6 04 10    2010679                 Call    Bank_Call
1F90 8B ED         10680                 Jr      Rd_B_Crc_1
1F92               10681                 
1F92               10682                 .LSTOFF
1F92               10734                 .LSTON






































        WIDGET.ASSEM            Page 169
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1F92               10735                 .Page
1F92               10736                 .FIN
1F92               10737 
1F92               10738 OverLap:
1F92 D6 16 6F    2010739                 Call    Srch_Cache
1F95 EB 2A         10740                 Jr      Nz,OvrLapSeek
1F97               10741                 
1F97 70 E0         10742                 Push    !r0 ;save Head/Sector info
1F99 76 5A 40    1010743                 Tm      BlkStat,#CachHdChg ;check for a head change
1F9C 6B 1A         10744                 Jr      Z,Ovr_Ld_Sctr
1F9E               10745                 
1F9E B6 54 01    1010746                 Xor     Head,#01 ;complement the head value
1FA1 E8 54        610747                  Ld     !rE,Head
1FA3 2C 26        610748                  Ld     !r2,#.HIBYTE. SelectHead
1FA5 3C 62        610749                  Ld     !r3,#.LOWBYTE. SelectHead
1FA7 D6 04 10    2010750                 Call    Bank_Call
1FAA               10751                 
1FAA 2C 2A        610752 Ovr_LdCache:     Ld     !r2,#.HIBYTE. Load_Cache
1FAC 3C 89        610753                  Ld     !r3,#.LOWBYTE. Load_Cache
1FAE D6 04 10    2010754                 Call    Bank_Call ;update the cache
1FB1 2C 27        610755                  Ld     !r2,#.HIBYTE. Chk_Offset
1FB3 3C 3F        610756                  Ld     !r3,#.LOWBYTE. Chk_Offset
1FB5 D6 04 10    2010757                 Call    Bank_Call
1FB8               10758                 
1FB8 50 E3       1010759 Ovr_Ld_Sctr:    Pop     !r3 ;get Head/Sector infor from stack
1FBA 56 E3 1F    1010760                 And     !r3,#$1F ;mask off all but sector info
1FBD 39 55        610761                 Ld      Sector,!r3
1FBF 8B 28         10762                 Jr      OvrLp_End
1FC1               10763                 
1FC1 2C 16        610764 OvrLapSeek:      Ld     !r2,#.HIBYTE. CnvrtLogical
1FC3 3C 4B        610765                  Ld     !r3,#.LOWBYTE. CnvrtLogical
1FC5 D6 04 10    2010766                 Call    Bank_Call
1FC8               10767 
1FC8 B0 E8        610768 OvrLp_Lp:        Clr    !r8 ;no wait
1FCA 2C 25        610769                  Ld     !r2,#.HIBYTE. PosHeads
1FCC 3C D3        610770                  Ld     !r3,#.LOWBYTE. PosHeads
1FCE D6 04 10    2010771                 Call    Bank_Call
1FD1               10772                 
1FD1 D6 10 9E    2010773 OvrLp_2:        Call    ExtPush_Vector
1FD4 2C 2A        610774                  Ld     !r2,#.HIBYTE. Load_Cache
1FD6 3C 89        610775                  Ld     !r3,#.LOWBYTE. Load_Cache
1FD8 D6 04 10    2010776                 Call    Bank_Call ;update the cache
1FDB               10777                  
1FDB 2C 16        610778                  Ld     !r2,#.HIBYTE. CachStat
1FDD 3C E8        610779                  Ld     !r3,#.LOWBYTE. CachStat
1FDF 82 02       1210780                  Lde    !r0,@!!r2
1FE1 09 5A        610781                  Ld     BlkStat,!r0
1FE3               10782                  
1FE3 D6 10 A6    2010783 OvrLp_S_1:      Call    ExtPop_Vector
1FE6 D6 05 10    2010784                 Call    New_Seek
1FE9               10785 
1FE9 8D 04 5F      10786 OvrLp_End:      Jp      Bank_Ret
1FEC               10787 
1FEC               10788                 .LSTOFF





        WIDGET.ASSEM            Page 170
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1FEC               10795                 .LSTON


























































        WIDGET.ASSEM            Page 171
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


1FEC               10796                 .Page
1FEC               10797                 .FIN
1FEC               10798                 
1FEC               10799                 .ORG    $2000 ;move this code into the eprom, bank 1
2000               10800                 
2000 00 00         10801                 .BLOCK  0,2   ;reserve two bytes for the checkbyte
2002 01            10802                 .DB     1     ;bank 1
2003 F0 78 3C 1E   10803                 .DB     $F0, $78, $3C, $1E
2007               10804                 .LSTOFF
2007               10895                 .LSTON

















































        WIDGET.ASSEM            Page 172
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2007               10896                 .Page
2007               10897                 .FIN
2007               10898                 
2007               10899 ReadHdr:
2007 56 56 DF    1010900                 And     DiskStat,#$FF-Wr_Op
200A               10901                 
200A B0 E9        610902                 Clr     !r9     ;clear booleans
200C               10903                 
200C D6 02 C0    2010904 RdHBlk_Rpt:     Call    RdHdr_Resident     ;go internal to the Z8
200F               10905 
200F 18 E0        610906                 Ld      !r1,!r0         ;CASE Status.State
2011 56 E1 0F    1010907                 And     !r1,#$0F
2014 A6 E1 02    1010908                 Cp      !r1,#Norm_State
2017 6B 0D         10909                 Jr      Z,RdHdr_Norm
2019               10910                 
2019 D6 04 E7    2010911                  Call   Reset_StMach
201C 56 56 BF    1010912                  And    DiskStat,#$FF-RdHdrRecal
201F B8 EA        610913                  Ld     !rB,!rA
2021 A8 E0        610914                  Ld     !rA,!r0
2023 D6 04 80    2010915                 Call    Abort
2026               10916                 
2026 18 E0        610917 RdHdr_Norm:     Ld      !r1,!r0         ;IF ServorErr OR NOT( ServoRdy )
2028 76 E1 10    1010918                 Tm      !r1,#ServoErr
202B EB 05         10919                 Jr      Nz,RdH_ServoErr
202D 76 E1 20    1010920                 Tm      !r1,#ServoRdy
2030 EB 05         10921                 Jr      Nz,RdH_SrvoOk
2032               10922                 
2032 46 E9 C0    1010923 RdH_ServoErr:   Or      !r9,#RdHError + RdHSrvoErr ; THEN RdHError AND RdHServoErrEnd
2035 8B 1A         10924                 Jr      RdH_End
2037               10925                 
2037 76 E0 80    1010926 RdH_SrvoOk:     Tm      !r0,#CrcErrL    ;IF Status.CrcErr
203A 6B 0D         10927                 Jr      Z,RdH_CrcErr
203C 76 E0 40    1010928 RdH_ChkEcc:     Tm      !r0,#WrtNvldL   ;OR Status.EccErr
203F EB 10         10929                 Jr      Nz,RdH_End
2041 46 E9 88    1010930                 Or      !r9,#RdHError+RdCrcErr
2044 46 27 80    1010931                 Or      RdErrCnt,#EccStat
2047 8B 08         10932                 Jr      RdH_End
2049               10933                 
2049 46 E9 88    1010934 RdH_CrcErr:     Or      !r9,#RdHError+RdCrcErr    ; ELSE
204C E6 27 40    1010935                 Ld      RdErrCnt,#CrcStat
204F 8B EB         10936                 Jr      RdH_ChkEcc
2051               10937                 
2051 08 E9        610938 RdH_End:        Ld      !r0,!r9 ;send status back to caller
2053 99 26        610939                 Ld      RdStat,!r9
2055               10940                 
2055 66 E0 80    1010941                 Tcm     !r0,#RdHError ;set zero flag if error
2058 8D 04 5F      10942                 Jp      Bank_Ret
205B               10943                 
205B               10944                 .LSTOFF
205B               11012                 .LSTON









        WIDGET.ASSEM            Page 173
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


205B               11013                 .Page
205B               11014                 .FIN
205B               11015                 
205B 0C 12        611016 Buf2_To_RBuf:    Ld     !r0,#.HIBYTE. Buf2Array
205D 1C 74        611017                  Ld     !r1,#.LOWBYTE. Buf2Array
205F 2C 10        611018                  Ld     !r2,#.HIBYTE. RDummy
2061 3C 18        611019                  Ld     !r3,#.LOWBYTE. RDummy
2063 8B 41         11020                 Jr      B_Move
2065               11021 
2065 A6 58 02    1011022 WrBuf_To_Buf2:  Cp      DataType,#User_Type ;nop if sparetable data
2068 EB 3F         11023                 Jr      Nz,Return_Vector
206A 0C 10        611024                  Ld     !r0,#.HIBYTE. ( WBuffer1-1 )
206C 1C 20        611025                  Ld     !r1,#.LOWBYTE. ( WBuffer1-1 )
206E 8B 32         11026                 Jr      X_To_Buf2
2070               11027                 
2070 A6 58 02    1011028 Buf2_To_WrBuf:  Cp      DataType,#User_Type
2073 EB 37         11029                 Jr      Nz,Spr_To_WrBuf
2075 0C 12        611030                  Ld     !r0,#.HIBYTE. Buf2Array
2077 1C 74        611031                  Ld     !r1,#.LOWBYTE. Buf2Array
2079 2C 10        611032                  Ld     !r2,#.HIBYTE. ( WBuffer1-1 )
207B 3C 20        611033                  Ld     !r3,#.LOWBYTE. ( WBuffer1-1 )
207D 8B 27         11034                 Jr      B_Move
207F               11035                 
207F 0C 14        611036 Spr_To_RBuf:     Ld     !r0,#.HIBYTE. SpareArray
2081 1C BB        611037                  Ld     !r1,#.LOWBYTE. SpareArray
2083 2C 10        611038                  Ld     !r2,#.HIBYTE. RBuffer1
2085 3C 19        611039                  Ld     !r3,#.LOWBYTE. RBuffer1
2087 8B 1D         11040                 Jr      B_Move
2089               11041 
2089 0C 10        611042 RBuf_To_Spr:     Ld     !r0,#.HIBYTE. RBuffer1
208B 1C 19        611043                  Ld     !r1,#.LOWBYTE. RBuffer1
208D 2C 14        611044 X_To_Spr:        Ld     !r2,#.HIBYTE. SpareArray
208F 3C BB        611045                  Ld     !r3,#.LOWBYTE. SpareArray
2091 8B 13         11046                 Jr      B_Move
2093               11047                 
2093 0C 10        611048 WrBuf_To_Spr:    Ld     !r0,#.HIBYTE. WBuffer1
2095 1C 21        611049                  Ld     !r1,#.LOWBYTE. WBuffer1
2097 8B F4         11050                  Jr     X_To_Spr
2099               11051                  
2099 A6 58 02    1011052 RBuf_To_Buf2:   Cp      DataType,#User_Type ;nop if sparetable data
209C EB 0B         11053                 Jr      Nz,Return_Vector
209E 0C 10        611054                  Ld     !r0,#.HIBYTE. RDummy
20A0 1C 18        611055                  Ld     !r1,#.LOWBYTE. RDummy
20A2 2C 12        611056 X_To_Buf2:       Ld     !r2,#.HIBYTE. Buf2Array
20A4 3C 74        611057                  Ld     !r3,#.LOWBYTE. Buf2Array
20A6 D6 21 4F    2011058 B_Move:         Call    BlockMove
20A9 8D 04 5F      11059 Return_Vector:  Jp      Bank_Ret
20AC               11060                 
20AC 0C 14        611061 Spr_To_WrBuf:    Ld     !r0,#.HIBYTE. SpareArray
20AE 1C BB        611062                  Ld     !r1,#.LOWBYTE. SpareArray
20B0 2C 10        611063                  Ld     !r2,#.HIBYTE. WBuffer1
20B2 3C 21        611064                  Ld     !r3,#.LOWBYTE. WBuffer1
20B4 8B F0         11065                 Jr      B_Move
20B6               11066 





        WIDGET.ASSEM            Page 174
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


20B6 8B F1         11067 Zero_RdBuf:     Jr      Return_Vector ;NOP { taken out to save space }
20B8               11068 
20B8 2C 10        611069 Zero_Fmt:        Ld     !r2,#.HIBYTE. ReadArray
20BA 3C 00        611070                  Ld     !r3,#.LOWBYTE. ReadArray
20BC D6 06 49    2011071                 Call    ZeroBlock
20BF               11072                 
20BF 2C 10        611073                  Ld     !r2,#.HIBYTE. FBuffer1
20C1 3C 52        611074                  Ld     !r3,#.LOWBYTE. FBuffer1
20C3 EC 02        611075                  Ld     !rE,#.HIBYTE. ( FEndGap - FBuffer1 )
20C5 FC 1C        611076                  Ld     !rF,#.LOWBYTE. ( FEndGap - FBuffer1 )
20C7 0C C6        611077                  Ld     !r0,#$C6 ;init block to pattern
20C9 92 02       1211078 Zero_FLp1:      Lde     @!!r2,!r0
20CB A0 E2       1011079                 Incw    !!r2
20CD 80 EE       1011080                 Decw    !!rE
20CF EB F8         11081                 Jr      Nz,Zero_Flp1
20D1 8D 20 A9*56   11082                 Jp      Return_Vector
20D4               11083                 
20D4               11084                 .LSTOFF
20D4               11108                 .LSTON








































        WIDGET.ASSEM            Page 175
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


20D4               11109                 .Page
20D4               11110                 .FIN
20D4               11111                 
20D4               11112 Get_Cyl_H_S:    
20D4 D6 25 21    2011113                 Call    DivHdsSctrs     ;return Cylinder #, remainder = !r0:3
20D7               11114                 
20D7 70 E0         11115                 Push    !r0             ;get ready to pass results to caller
20D9 70 E1         11116                 Push    !r1
20DB               11117 
20DB D6 25 2B    2011118                 Call    DivSctrs        ;return with !r1 = Head, !r2 = Sector
20DE               11119                 
20DE F8 E3        611120                 Ld      !rF,!r3         ;Sector
20E0 E8 E2        611121                 Ld      !rE,!r2         ;Head
20E2 50 ED       1011122                 Pop     !rD             ;Lo Cylinder
20E4 50 EC       1011123                 Pop     !rC             ;Hi Cylinder
20E6               11124                 
20E6 F9 22        611125                 Ld      PSector,!rF     ;UpDate physical sector
20E8               11126                 
20E8 8D 04 5F      11127                 Jp      Bank_Ret
20EB               11128                 
20EB               11129                 .LSTOFF
20EB               11163                 .LSTON





































        WIDGET.ASSEM            Page 176
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


20EB               11164                 .Page
20EB               11165                 .FIN
20EB               11166                 
20EB               11167 UpDate_Cur_Cyl:
20EB D6 20 FA    2011168                 Call    GoodHdr
20EE 6B 07         11169                 Jr      Z,UD_C_C_End
20F0               11170                 
20F0 09 50        611171                 Ld      Cur_Cyl,!r0
20F2 19 51        611172                 Ld      Cur_Cyl+1,!r1
20F4 46 E1 01    1011173                 Or      !r1,#01         ;return non-zero status
20F7               11174                 
20F7 8D 04 5F      11175 UD_C_C_End:     Jp      Bank_Ret
20FA               11176                  
20FA               11177                 .LSTOFF
20FA               11217                 .LSTON












































        WIDGET.ASSEM            Page 177
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


20FA               11218                 .Page
20FA               11219                 .FIN
20FA               11220                 
20FA               11221 GoodHdr:
20FA 4C 08        611222                 Ld      !r4,#8 ;try hard to read a good header
20FC               11223                 
20FC D6 20 07    2011224 GdHdr_1:        Call   ReadHdr
20FF               11225 
20FF 2C 10        611226                 Ld     !r2,#.HIBYTE. RHHeader
2101 3C 0C        611227                 Ld     !r3,#.LOWBYTE. RHHeader
2103 0C 40        611228                 Ld     !r0,#ScrReg0
2105 1C 06        611229                 Ld     !r1,#6  ;load 6 bytes
2107               11230 
2107 83 02       1811231 GdHdr_Lp:       Ldei   @!r0,@!!r2
2109 1A FC         11232                 Djnz   !r1,GdHdr_Lp
210B               11233                 
210B 31 40        611234                 Srp    #Wrk_Scr ;context switch
210D               11235                 
210D B2 30        611236                 Xor    !r3,!r0 ;check for valid header
210F B2 41        611237                 Xor    !r4,!r1
2111 B2 52        611238                 Xor    !r5,!r2
2113               11239                 
2113 52 34        611240                 And    !r3,!r4
2115 52 35        611241                 And    !r3,!r5
2117 60 E3        611242                 Com    !r3
2119               11243                 
2119 31 10        611244                 Srp     #Wrk_Sys ;context switch
211B B0 46        611245                 Clr     ScrReg6 ;assume bad header
211D 6B 13         11246                 Jr      Z,GdHdr_2
211F               11247                 
211F 76 24 80    1011248                 Tm      Excpt_Stat,#Recovery ;check for Recovery on
2122 6B 25         11249                 Jr      Z,GdHdr_End
2124               11250                 
2124 D6 27 44    2011251                 Call    ChkOff_NoOff ;set auto_offset if not already on
2127               11252                 
2127 2C 00        611253                  Ld     !r2,#.HIBYTE. 10 ;wait 100 ms before retrying
2129 3C 0A        611254                  Ld     !r3,#.LOWBYTE. 10
212B D6 01 CE    2011255                 Call    MsWait
212E               11256                 
212E 4A CC         11257                 Djnz    !r4,GdHdr_1 ;retry if bad header
2130 8B 17         11258                 Jr      GdHdr_End
2132               11259                 
2132 08 40        611260 GdHdr_2:        Ld      !r0,ScrReg0 ;GoodHdr.Cylinder := ReadHdr.Cylinder
2134 18 41        611261                 Ld      !r1,ScrReg1
2136 28 42        611262                 Ld      !r2,ScrReg2 ;GoodHdr.Head := ReadHdr.HdSctr/bits 7:6
2138 F0 E2        811263                 Swap    !r2
213A E0 E2        611264                 Rr      !r2
213C E0 E2        611265                 Rr      !r2
213E 56 E2 03    1011266                 And     !r2,#$03    ;just leave head info in register
2141 38 42        611267                 Ld      !r3,ScrReg2 ;GoodHdr.Sector := ReadHdr.HdSctr/bits 5:0
2143 56 E3 3F    1011268                 And     !r3,#$3F
2146 E6 46 01    1011269                 Ld      ScrReg6,#1
2149               11270                 
2149 44 46 46    1011271 GdHdr_End:      Or      ScrReg6,ScrReg6 ;set zero flag





        WIDGET.ASSEM            Page 178
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


214C 8D 04 5F      11272                 Jp      Bank_Ret
214F               11273                 
214F               11274                 .LSTOFF
214F               11299                 .LSTON























































        WIDGET.ASSEM            Page 179
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


214F               11300                 .Page
214F               11301                 .FIN
214F               11302 
214F               11303 BlockMove:
214F D6 05 E8    2011304                 Call    Ext_Push
2152               11305                 
2152 4C 02        611306                 Ld      !r4,#.HIBYTE. BlockLength
2154 5C 1D        611307                 Ld      !r5,#.LOWBYTE. BlockLength
2156               11308                 
2156 82 60       1211309 Blk_Move:       Lde     !r6,@!!r0
2158 92 62       1211310                 Lde     @!!r2,!r6
215A A0 E0       1011311                 Incw    !!r0
215C A0 E2       1011312                 Incw    !!r2
215E 80 E4       1011313                 Decw    !!r4
2160 EB F4         11314                 Jr      Nz,Blk_Move
2162               11315                 
2162 D6 06 07    2011316                 Call    Ext_Pop
2165 AF          1411317                 Ret
2166               11318                 
2166               11319                 .LSTOFF
2166               11366                 .LSTON






































        WIDGET.ASSEM            Page 180
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2166               11367                 .Page
2166               11368                 .FIN
2166               11369 
2166               11370 UpDate_Hdr:
2166 D6 05 E8    2011371                 Call    Ext_Push
2169               11372                 
2169 56 56 7F    1011373                 And     DiskStatus,#$FF-On_Track
216C               11374                 
216C D6 20 FA    2011375                 Call    GoodHdr
216F 6B 21         11376                 Jr      Z,UpDt_Recal
2171               11377 
2171 09 50        611378 UpDate_OnTrck:  Ld      Cur_Cyl,!r0     ;Cur_Cyl := RHHeader.Cylinder
2173 19 51        611379                 Ld      Cur_Cyl+1,!r1
2175               11380                 
2175 B4 52 E0    1011381                 Xor     !r0,Cylinder ;check for correct cylinder address
2178 B4 53 E1    1011382                 Xor     !r1,Cylinder+1
217B 42 01        611383                 Or      !r0,!r1
217D 0C 00        611384                 Ld      !r0,#0 ;assume failure
217F EB 05         11385                 Jr      Nz,UpDate_Err
2181               11386                 
2181 46 56 80    1011387                 Or      DiskStatus,#On_Track
2184 0C 01        611388                 Ld      !r0,#1
2186               11389 
2186 42 00        611390 UpDate_Err:     Or      !r0,!r0
2188 70 FC         11391 UpDate_H_End:   Push    Flags
218A D6 06 07    2011392                 Call    Ext_Pop
218D 50 FC       1011393                 Pop     Flags
218F 8D 04 5F      11394                 Jp      Bank_Ret
2192               11395                 
2192 0C 40        611396 UpDt_Recal:      Ld     !r0,#DataRecal
2194 D6 28 2A    2011397                 Call    Restore
2197 0C 00        611398                 Ld      !r0,#0
2199 8B EB         11399                 Jr      UpDate_Err
219B               11400                 
219B               11401                 .LSTOFF
219B               11447                 .LSTON























        WIDGET.ASSEM            Page 181
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


219B               11448                 .Page
219B               11449                 .FIN
219B               11450 
219B               11451 Get_Type:
219B D6 05 46    2011452                 Call    Load_Logical
219E               11453                 
219E 08 E8        611454                 Ld      !r0,!r8
21A0 8C 02        611455                 Ld      !r8,#User_Type
21A2               11456                 
21A2 42 00        611457                 Or      !r0,!r0 ;IF ( Driver_Type  = Profile )
21A4 EB 2C         11458                 Jr      Nz,Get_Type_Check
21A6               11459                 
21A6 0C FF        611460                  Ld     !r0,#$FF ;IF BlockNumber = $-2...
21A8 1C FF        611461                  Ld     !r1,#$FF
21AA 2C FE        611462                  Ld     !r2,#$FE
21AC D6 03 25    2011463                 Call    Sub3 ;compare
21AF 42 01        611464                 Or      !r0,!r1
21B1 42 02        611465                 Or      !r0,!r2
21B3 EB 0A         11466                 Jr      Nz,G_T_ChkID
21B5               11467                 
21B5 8C 08        611468                 Ld      !r8,#SprTbl_Type
21B7               11469                 
21B7 B0 EC        611470 G_T_ProCnvrt:   Clr     !rC
21B9 B0 ED        611471                 Clr     !rD
21BB EC 01        611472                 Ld      !rE,#1
21BD 8B 13         11473                 Jr      Get_Type_Check
21BF               11474                 
21BF 0C FF        611475 G_T_ChkID:       Ld     !r0,#$FF ;IF BlockNumber = #$-1...
21C1 1C FF        611476                  Ld     !r1,#$FF
21C3 2C FF        611477                  Ld     !r2,#$FF
21C5 D6 03 25    2011478                 Call    Sub3 ;compare
21C8 42 01        611479                 Or      !r0,!r1
21CA 42 02        611480                 Or      !r0,!r2
21CC EB 04         11481                 Jr      Nz,Get_Type_Check
21CE 8C 04        611482                 Ld      !r8,#ID_Type
21D0 8B E5         11483                 Jr      G_T_ProCnvrt
21D2               11484                 
21D2 0C 00        611485 Get_Type_Check:  Ld     !r0,#HiMaxLogical ;IF ( BlockNumber > MaxLogical )...
21D4 1C 4B        611486                  Ld     !r1,#MidMaxLogical
21D6 2C FF        611487                  Ld     !r2,#LoMaxLogical
21D8 D6 03 25    2011488                 Call    Sub3 ;compare
21DB FB 0A         11489                 Jr      Uge,Get_Type_End
21DD               11490                 
21DD 0C 02        611491                  Ld     !r0,#2 ;byte 2
21DF 1C 40        611492                  Ld     !r1,#Illegal_Block
21E1 D6 03 83    2011493                 Call    SetStatus
21E4               11494                 
21E4 D6 04 80    2011495                 Call    Abort
21E7               11496                 
21E7 8D 04 5F      11497 Get_Type_End:   Jp      Bank_Ret
21EA               11498 
21EA               11499                 .LSTOFF
21EA               11566                 .LSTON






        WIDGET.ASSEM            Page 182
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


21EA               11567                 .Page
21EA               11568                 .FIN
21EA               11569 
21EA               11570 Init_SprTbl:
21EA 2C 14        611571                  Ld     !r2,#.HIBYTE. SpareArray
21EC 3C BB        611572                  Ld     !r3,#.LOWBYTE. SpareArray
21EE D6 06 49    2011573                 Call    ZeroBlock
21F1               11574                 
21F1 EC 14        611575                 Ld      !rE,#.HIBYTE. SparePw1
21F3 FC BB        611576                 Ld      !rF,#.LOWBYTE. SparePw1
21F5 D6 24 51    2011577                 Call    Load_PassWord ;load SparePw1
21F8               11578                 
21F8 2C 14        611579                 Ld      !r2,#.HIBYTE. FmtOffset
21FA 3C C3        611580                 Ld      !r3,#.LOWBYTE. FmtOffset
21FC               11581                 
21FC 92 42       1211582                 Lde     @!!r2,!r4 ;store offset value
21FE A0 E2       1011583                 Incw    !!r2
2200 92 52       1211584                 Lde     @!!r2,!r5 ;store interleave value
2202 A0 E2       1011585                 Incw    !!r2
2204               11586                 
2204 0C 80        611587                 Ld      !r0,#Nil
2206 1C 80        611588                 Ld      !r1,#( SprCount - SegPtrArray )
2208 92 02       1211589 I_S_Tbl_Lp2:    Lde     @!!r2,!r0
220A A0 E2       1011590                 Incw    !!r2
220C 1A FA         11591                 Djnz    !r1,I_S_Tbl_Lp2
220E               11592                 
220E 0C 00        611593                 Ld      !r0,#$00
2210 4C 01        611594                 Ld      !r4,#.HIBYTE. ( SpareCheck - SprCount )
2212 5C 4F        611595                 Ld      !r5,#.LOWBYTE. ( SpareCheck - SprCount )
2214 92 02       1211596 I_S_Tbl_Lp4:    Lde     @!!r2,!r0
2216 A0 E2       1011597                 Incw    !!r2
2218 80 E4       1011598                 Decw    !!r4
221A EB F8         11599                 Jr      Nz,I_S_Tbl_Lp4
221C               11600                 
221C E6 58 08    1011601                 Ld      Data_Type,#SprTbl_Type
221F 5C 02        611602                 Ld      !r5,#2 ;create two tables
2221 B0 E8        611603                 Clr     !r8
2223 D6 23 74    2011604 Create_Tbl:     Call    Spr
2226 2C 15        611605                  Ld     !r2,#.HIBYTE. GetNewSpare
2228 3C 0C        611606                  Ld     !r3,#.LOWBYTE. GetNewSpare
222A D6 04 10    2011607                 Call    Bank_Call
222D 70 E8         11608                 Push    !r8 ;save counter
222F F8 E0        611609                  Ld     !rF,!r0
2231 8C 08        611610                  Ld     !r8,#SprTbl_Type
2233 46 E8 10    1011611                  Or     !r8,#Spare
2236 2C 15        611612                  Ld     !r2,#.HIBYTE. AddSpare
2238 3C 79        611613                  Ld     !r3,#.LOWBYTE. AddSpare
223A D6 04 10    2011614                 Call    Bank_Call
223D 50 E8       1011615                 Pop     !r8
223F 8E           611616                 Inc     !r8 ;go to next table
2240 5A E1         11617                 Djnz    !r5,Create_Tbl
2242               11618                 
2242 2C 16        611619                 Ld      !r2,#.HIBYTE. Map_Table
2244 3C 81        611620                 Ld      !r3,#.LOWBYTE. Map_Table





        WIDGET.ASSEM            Page 183
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2246 1C 13        611621                 Ld      !r1,#NbrSctrs
2248 0C 00        611622                 Ld      !r0,#0
224A 92 02       1211623 I_Map_Lp:       Lde     @!!r2,!r0
224C A0 E2       1011624                 Incw    !!r2
224E 06 E0 0C    1011625                 Add     !r0,#Map_Dflt
2251 A6 E0 13    1011626                 Cp      !r0,#NbrSctrs
2254 1B 03         11627                 Jr      Lt,I_Map_Lp2
2256 26 E0 13    1011628                 Sub     !r0,#NbrSctrs
2259 1A EF         11629 I_Map_Lp2:      Djnz    !r1,I_Map_Lp
225B               11630                 
225B EC 16        611631                 Ld      !rE,#.HIBYTE. SparePw2
225D FC 96        611632                 Ld      !rF,#.LOWBYTE. SparePw2
225F D6 24 51    2011633                 Call    Load_PassWord
2262               11634                 
2262 D6 23 8A    2011635                 Call    UpDate_SprTbl
2265 8D 04 5F      11636                 Jp      Bank_Ret
2268               11637 
2268               11638                 .LSTOFF
2268               11712                 .LSTON








































        WIDGET.ASSEM            Page 184
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2268               11713                 .Page
2268               11714                 .FIN
2268               11715 
2268               11716 Load_SprTbl:
2268 5C 4C        611717                 Ld      !r5,#76 ;i := NumberOfSpareBlocks
226A B0 E4        611718                 Clr     !r4     ;SprTbl_Found := False
226C E6 58 02    1011719                 Ld      DataType,#User_Type
226F               11720                 
226F D6 05 E8    2011721 L_SprTbl_Lp:    Call    Ext_Push
2272 08 E5        611722                  Ld      !r0,!r5
2274 D6 25 18    2011723                 Call    MulR0_m
2277 D6 20 D4    2011724                 Call    Get_Cyl_H_S
227A E6 57 80    1011725                 Ld      Seek_Type,#Access
227D D6 25 50    2011726                 Call    Seek
2280 D6 06 07    2011727                 Call    Ext_Pop
2283               11728                 
2283 6C 13        611729                 Ld      !r6,#NbrSctrs ;check the entire track
2285 B0 55        611730                 Clr     Sector ;starting with sector 0
2287               11731                 
2287 70 E4         11732 L_Rd_Lp:        Push    !r4
2289 70 E5         11733                 Push    !r5
228B 70 E6         11734                 Push    !r6
228D 2C 10        611735                  Ld     !r2,#.HIBYTE. RdBlk_Vector
228F 3C 8A        611736                  Ld     !r3,#.LOWBYTE. RdBlk_Vector
2291 D6 04 10    2011737                 Call    Bank_Call
2294 50 E6       1011738                 Pop     !r6
2296 50 E5       1011739                 Pop     !r5
2298 50 E4       1011740                 Pop     !r4
229A EB 1C         11741                 Jr      Nz,Chk_SprTbl
229C               11742                 
229C 08 27        611743                 Ld      !r0,RdErrCnt
229E 56 E0 0F    1011744                 And     !r0,#$0F ;mask unwanted status
22A1 A6 E0 0A    1011745                 Cp      !r0,#10 ;check for any successful reads
22A4 9B 05         11746                 Jr      Ge,L_SprTbl_More
22A6               11747                 
22A6 D6 20 5B    2011748                 Call    Buf2_To_RBuf ;get good data back into ReadBuffer
22A9 8B 0D         11749                 Jr      Chk_SprTbl
22AB               11750                  
22AB 20 55        611751 L_SprTbl_More:  Inc     Sector
22AD 6A D8         11752                 Djnz    !r6,L_Rd_Lp
22AF 5A BE         11753                 Djnz    !r5,L_SprTbl_Lp
22B1               11754                 
22B1 42 44        611755                 Or      !r4,!r4 ;check if any spare table found
22B3 EB 62         11756                 Jr      Nz,L_Spr_End
22B5               11757                 
22B5 D6 04 80    2011758                 Call    Abort
22B8               11759                 
22B8 E6 42 12    1011760 Chk_SprTbl:      Ld     ScrReg2,#.HIBYTE. ( RBuffer1+BlockID )
22BB E6 43 19    1011761                  Ld     ScrReg3,#.LOWBYTE. ( RBuffer1+BlockID )
22BE D6 24 30    2011762                 Call    Chk_PassWord
22C1 6B E8         11763                 Jr      Z,L_SprTbl_More
22C3               11764                 
22C3 E6 42 10    1011765                  Ld     ScrReg2,#.HIBYTE. RBuffer1
22C6 E6 43 19    1011766                  Ld     ScrReg3,#.LOWBYTE. RBuffer1





        WIDGET.ASSEM            Page 185
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


22C9 D6 24 30    2011767                 Call    Chk_PassWord
22CC 6B DD         11768                 Jr      Z,L_SprTbl_More
22CE               11769                 
22CE 2C 11        611770                 Ld      !r2,#.HIBYTE. ( RBuffer1+SpareCheck-SpareArray )
22D0 3C F2        611771                 Ld      !r3,#.LOWBYTE. ( RBuffer1+SpareCheck-SpareArray )
22D2 82 02       1211772                 Lde     !r0,@!!r2 ;check possible check byte
22D4 A0 E2       1011773                 Incw    !!r2
22D6 82 12       1211774                 Lde     !r1,@!!r2
22D8               11775                 
22D8 31 40        611776                 Srp     #Wrk_Scr
22DA CC 10        611777                  Ld     !rC,#.HIBYTE. RBuffer1
22DC DC 19        611778                  Ld     !rD,#.LOWBYTE. RBuffer1
22DE D6 23 32    2011779                 Call    SprChk2
22E1               11780                 
22E1 31 10        611781                 Srp     #Wrk_Sys
22E3 D6 23 61    2011782                 Call    Chk_Spr2
22E6 6B C3         11783                 Jr      Z,L_SprTbl_More
22E8               11784                 
22E8 42 44        611785                 Or      !r4,!r4 ;check for a SpareTable already found
22EA 6B 22         11786                 Jr      Z,L_Spr_Move
22EC               11787                  
22EC 31 40        611788                 Srp     #Wrk_Scr
22EE 6C 14        611789                  Ld     !r6,#.HIBYTE. SpareTmStmp
22F0 7C BF        611790                  Ld     !r7,#.LOWBYTE. SpareTmStmp
22F2 4C 40        611791                  Ld     !r4,#ScrReg0
22F4 D6 23 27    2011792                 Call    Ld_TmStmp
22F7 6C 10        611793                  Ld     !r6,#.HIBYTE. ( RBuffer1+SpareTmStmp-SpareArray )
22F9 7C 1D        611794                  Ld     !r7,#.LOWBYTE. ( RBuffer1+SpareTmStmp-SpareArray )
22FB 4C 4C        611795                  Ld     !r4,#ScrRegC
22FD D6 23 27    2011796                 Call    Ld_TmStmp
2300 22 3F        611797                 Sub     !r3,!rF
2302 32 2E        611798                 Sbc     !r2,!rE
2304 32 1D        611799                 Sbc     !r1,!rD
2306 32 0C        611800                 Sbc     !r0,!rC
2308 31 10        611801                 Srp     #Wrk_Sys
230A 9B 05         11802                 Jr      Ge,L_Spr_Inc
230C 00 E4        611803                 Dec     !r4     ;account for old, bogus spare table
230E               11804                 
230E D6 20 89    2011805 L_Spr_Move:     Call    RBuf_To_Spr
2311               11806                 
2311 4E           611807 L_Spr_Inc:      Inc     !r4     ;note the arrival of a SpareTable
2312 A6 E4 02    1011808                 Cp      !r4,#2  ;see if that's all there is
2315 EB 94         11809                 Jr      Nz,L_SprTbl_More
2317               11810                 
2317 D6 23 8A    2011811 L_Spr_End:      Call    UpDate_SprTbl
231A 56 25 FE    1011812                 And     SlfTst_Result,#$FF-No_SprTbl
231D               11813                 
231D 2C 28        611814                  Ld     !r2,#.HIBYTE. Park_Heads
231F 3C D0        611815                  Ld     !r3,#.LOWBYTE. Park_Heads
2321 D6 04 10    2011816                 Call    Bank_Call
2324 8D 04 5F      11817                 Jp      Bank_Ret
2327               11818                 
2327               11819 ;*******************************
2327               11820 





        WIDGET.ASSEM            Page 186
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2327 5C 04        611821 Ld_TmStmp:      Ld     !r5,#4 ;load 4 bytes
2329 83 46       1811822 Ld_Tm_Lp:       Ldei   @!r4,@!!r6
232B 5A FC         11823                 Djnz   !r5,Ld_Tm_Lp
232D AF          1411824                 Ret
232E               11825                  
232E               11826                 .LSTOFF
232E               11857                 .LSTON




















































        WIDGET.ASSEM            Page 187
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


232E               11858                 .Page
232E               11859                 .FIN
232E               11860 
232E               11861 SprChkSum:
232E CC 14        611862                 Ld      !rC,#.HIBYTE. SpareArray
2330 DC BB        611863                 Ld      !rD,#.LOWBYTE. SpareArray
2332               11864                 
2332 EC 01        611865 SprChk2:        Ld      !rE,#.HIBYTE. ( SpareCheck - SpareArray )
2334 FC D9        611866                 Ld      !rF,#.LOWBYTE. ( SpareCheck - SpareArray )
2336               11867                 
2336 B0 E1        611868                 Clr     !r1
2338 B0 E2        611869                 Clr     !r2
233A               11870                 
233A 82 0C       1211871 SprChk_Lp:      Lde     !r0,@!!rC
233C 02 20        611872                 Add     !r2,!r0
233E 16 E1 00    1011873                 Adc     !r1,#0
2341 A0 EC       1011874                 Incw    !!rC
2343 80 EE       1011875                 Decw    !!rE
2345 EB F3         11876                 Jr      Nz,SprChk_Lp
2347               11877                 
2347 92 1C       1211878                 Lde     @!!rC,!r1 ;store hibyte of checksum
2349 A0 EC       1011879                 Incw    !!rC
234B 92 2C       1211880                 Lde     @!!rC,!r2 ;store low byte of checksum
234D               11881                 
234D 8D 04 5F      11882                 Jp      Bank_Ret
2350               11883                 
2350               11884                 .LSTOFF
2350               11914                 .LSTON































        WIDGET.ASSEM            Page 188
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2350               11915                 .Page
2350               11916                 .FIN
2350               11917 
2350               11918 Chk_SprChk:
2350 2C 16        611919                 Ld      !r2,#.HIBYTE. SpareCheck
2352 3C 94        611920                 Ld      !r3,#.LOWBYTE. SpareCheck
2354 82 02       1211921                 Lde     !r0,@!!r2
2356 A0 E2       1011922                 Incw    !!r2
2358 82 12       1211923                 Lde     !r1,@!!r2
235A               11924                 
235A 31 40        611925                  Srp    #Wrk_Scr
235C D6 23 2E    2011926                 Call    SprChkSum
235F 31 10        611927                  Srp    #Wrk_Sys
2361               11928 
2361 B4 41 E0    1011929 Chk_Spr2:       Xor     !r0,ScrReg1 ;side effect: ScrReg2:3 hold new checkyte
2364 B4 42 E1    1011930                 Xor     !r1,ScrReg2
2367 42 01        611931                 Or      !r0,!r1
2369 B0 E0        611932                 Clr     !r0
236B EB 02         11933                 Jr      Nz,Chk_Spr_End
236D               11934                 
236D 0C 01        611935                 Ld      !r0,#1
236F               11936                 
236F 42 00        611937 Chk_Spr_End:    Or      !r0,!r0 ;set zero flag
2371 8D 04 5F      11938                 Jp      Bank_Ret
2374               11939                 
2374               11940                 .LSTOFF
2374               11971                 .LSTON
































        WIDGET.ASSEM            Page 189
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2374               11972                 .Page
2374               11973                 .FIN
2374               11974 
2374               11975 Spr:
2374 56 E8 01    1011976                 And     !r8,#$01 ;IF SpareTableIndex is EVEN
2377 EB 08         11977                 Jr      Nz,Spr_Odd
2379               11978                 
2379 CC 00        611979                 Ld      !rC,#HiSpr0
237B DC 19        611980                 Ld      !rD,#MidSpr0
237D EC 55        611981                 Ld      !rE,#LoSpr0
237F 8B 06         11982                 Jr      Spr_End
2381               11983                 
2381 CC 00        611984 Spr_Odd:        Ld      !rC,#HiSpr1
2383 DC 32        611985                 Ld      !rD,#MidSpr1
2385 EC AA        611986                 Ld      !rE,#LoSpr1
2387               11987                 
2387 8D 04 5F      11988 Spr_End:        Jp      Bank_Ret
238A               11989 
238A               11990                 .LSTOFF
238A               12035                 .LSTON







































        WIDGET.ASSEM            Page 190
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


238A               12036                 .Page
238A               12037                 .FIN
238A               12038                 
238A               12039 UpDate_SprTbl:  
238A C8 52        612040                 Ld      !rC,Cylinder ;save current seek address
238C D8 53        612041                 Ld      !rD,Cylinder+1
238E E8 54        612042                 Ld      !rE,Head
2390 F8 55        612043                 Ld      !rF,Sector
2392 D6 05 E8    2012044                 Call    Ext_Push
2395               12045                 
2395 2C 14        612046                 Ld      !r2,#.HIBYTE. SpareTmStamp
2397 3C BF        612047                 Ld      !r3,#.LOWBYTE. SpareTmStamp
2399 0C 1C        612048                 Ld      !r0,#Wrk_Sys+$C
239B 1C 04        612049                 Ld      !r1,#4 ;get 4 bytes
239D 83 02       1812050 UpDate_1:       Ldei    @!r0,@!!r2
239F 1A FC         12051                 Djnz    !r1,UpDate_1
23A1 06 EF 01    1012052                 Add     !rF,#1 ;increment the count
23A4 16 EE 00    1012053                 Adc     !rE,#0
23A7 16 ED 00    1012054                 Adc     !rD,#0
23AA 16 EC 00    1012055                 Adc     !rC,#0
23AD 0C 1C        612056                 Ld      !r0,#Wrk_Sys+$C
23AF 1C 04        612057                 Ld      !r1,#4 ;move 4 bytes
23B1 2C 14        612058                 Ld      !r2,#.HIBYTE. SpareTmStamp
23B3 3C BF        612059                 Ld      !r3,#.LOWBYTE. SpareTmStamp
23B5 93 02       1812060 UpDate_2:       Ldei    @!!r2,@!r0
23B7 1A FC         12061                 Djnz    !r1,UpDate_2
23B9               12062                 
23B9 D6 23 2E    2012063                 Call    SprChkSum
23BC               12064                 
23BC 4C 02        612065                 Ld      !r4,#2 ;write the table to the disk twice
23BE B0 E5        612066                 Clr     !r5 ;spare table index
23C0               12067                 
23C0 D6 20 AC    2012068 SprB_Lp:        Call    Spr_To_WrBuf
23C3               12069                 
23C3 EC 12        612070                  Ld     !rE,#.HIBYTE. ( WBuffer1 + BlockID )
23C5 FC 21        612071                  Ld     !rF,#.LOWBYTE. ( WBuffer1 + BlockID )
23C7 D6 24 51    2012072                 Call    Load_PassWord
23CA               12073                 
23CA 88 E5        612074                  Ld     !r8,!r5
23CC D6 23 74    2012075                 Call    Spr
23CF               12076                 
23CF E6 58 08    1012077                 Ld      Data_Type,#Spr_Tbl_Type
23D2 2C 16        612078                  Ld     !r2,#.HIBYTE. CnvrtLogical
23D4 3C 4B        612079                  Ld     !r3,#.LOWBYTE. CnvrtLogical
23D6 D6 04 10    2012080                 Call    Bank_Call
23D9 EB 03         12081                 Jr      Nz,SprB_Seek
23DB               12082                 
23DB D6 04 80    2012083                 Call    Abort
23DE               12084                 
23DE E6 57 90    1012085 SprB_Seek:      Ld      Seek_Type,#Access_Offset
23E1 D6 25 50    2012086                 Call    Seek
23E4               12087                 
23E4 E6 5A 01    1012088                  Ld     BlkStat,#S_Block ;say that we've got a spare block
23E7 E6 58 08    1012089                  Ld     Data_Type,#SprTbl_Type ;ditto





        WIDGET.ASSEM            Page 191
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


23EA E6 27 0A    1012090                  Ld     RdErrCnt,#10 ;prime the counter for write error
23ED 2C 19        612091                  Ld     !r2,#.HIBYTE. WrVer_Common
23EF 3C 75        612092                  Ld     !r3,#.LOWBYTE. WrVer_Common
23F1 D6 04 10    2012093                 Call    Bank_Call
23F4 EB 2E         12094                 Jr      Nz,Spr_Next
23F6               12095                 
23F6 76 24 80    1012096                 Tm      Excpt_Stat,#Recovery ;IF Recovery THEN ...
23F9 EB 03         12097                 Jr      Nz,Rcvr_SprTbl
23FB               12098                 
23FB D6 04 80    2012099                 Call    Abort
23FE               12100                 
23FE 18 27        612101 Rcvr_SprTbl:    Ld      !r1,RdErrCnt ;check for noisy read
2400 56 E1 0F    1012102                 And     !r1,#$0F
2403 A6 E1 03    1012103                 Cp      !r1,#SprThresh
2406 2B 1C         12104                 Jr      Le,Spr_Next
2408               12105                 
2408 2C 10        612106                  Ld     !r2,#.HIBYTE. WBuffer1
240A 3C 21        612107                  Ld     !r3,#.LOWBYTE. WBuffer1
240C D6 06 49    2012108                 Call    ZeroBlock
240F               12109                 
240F 2C 18        612110                  Ld     !r2,#.HIBYTE. Wr_Common
2411 3C E0        612111                  Ld     !r3,#.LOWBYTE. Wr_Common
2413 D6 04 10    2012112                 Call    Bank_Call
2416               12113                 
2416 88 E5        612114                  Ld     !r8,!r5
2418 D6 23 74    2012115                  Call   Spr
241B 2C 13        612116                  Ld     !r2,#.HIBYTE. SprEnter
241D 3C FB        612117                  Ld     !r3,#.LOWBYTE. SprEnter
241F D6 04 10    2012118                 Call    Bank_Call
2422 6B DA         12119                 Jr      Z,Rcvr_SprTbl
2424               12120                 
2424 5E           612121 Spr_Next:       Inc     !r5 ;do next table
2425 4A 99         12122                 Djnz    !r4,SprB_Lp
2427               12123                 
2427 D6 06 07    2012124                 Call    Ext_Pop
242A D6 25 50    2012125                 Call    Seek ;get back to original seek address
242D 8D 04 5F      12126                 Jp      Bank_Ret
2430               12127                 
2430               12128                 .LSTOFF
2430               12158                 .LSTON



















        WIDGET.ASSEM            Page 192
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2430               12159                 .Page
2430               12160                 .FIN
2430               12161                 
2430               12162 Chk_PassWord:
2430 31 40        612163                 Srp     #Wrk_Scr
2432 4C 04        612164                 Ld      !r4,#4 ;check 4 bytes
2434               12165 
2434 EC 10        612166                 Ld      !rE,#.HIBYTE. PassWord
2436 FC 03        612167                 Ld      !rF,#.LOWBYTE. PassWord
2438               12168                 
2438 C2 0E       1212169 Chk_P_Lp:       Ldc     !r0,@!!rE ;get a byte of the password
243A A0 EE       1012170                 Incw    !!rE
243C 82 12       1212171                 Lde     !r1,@!!r2 ;get a byte of test string
243E A0 E2       1012172                 Incw    !!r2
2440 A2 01        612173                 Cp      !r0,!r1
2442 B0 E0        612174                 Clr     !r0 ;assume failure
2444 EB 04         12175                 Jr      Nz,Chk_P_End
2446 4A F0         12176                 Djnz    !r4,Chk_P_Lp
2448               12177                 
2448 0C 01        612178                 Ld      !r0,#1
244A               12179                 
244A 42 00        612180 Chk_P_End:      Or      !r0,!r0 ;set flags
244C 31 10        612181                 Srp     #Wrk_Sys
244E 8D 04 5F      12182                 Jp      Bank_Ret
2451               12183                 
2451               12184                 .LSTOFF
2451               12204                 .LSTON
































        WIDGET.ASSEM            Page 193
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2451               12205                 .Page
2451               12206                 .FIN
2451               12207 
2451               12208 Load_PassWord:
2451 2C 10        612209                 Ld     !r2,#.HIBYTE. PassWord
2453 3C 03        612210                 Ld     !r3,#.LOWBYTE. PassWord
2455 1C 04        612211                 Ld     !r1,#4 ;move 4 bytes
2457               12212                  
2457 C2 02       1212213 Lpw_Lp:         Ldc     !r0,@!!r2
2459 92 0E       1212214                 Lde     @!!rE,!r0
245B A0 E2       1012215                 Incw    !!r2
245D A0 EE       1012216                 Incw    !!rE
245F 1A F6         12217                 Djnz    !r1,Lpw_Lp
2461               12218                 
2461 8D 04 5F      12219                 Jp      Bank_Ret
2464               12220                 
2464               12221                 .LSTOFF
2464               12257                 .LSTON









































        WIDGET.ASSEM            Page 194
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2464               12258                 .Page
2464               12259                 .FIN
2464               12260 
2464               12261 SpareCount:
2464 18 E0        612262                 Ld      !r1,!r0 ;get command
2466 56 E1 FC    1012263                 And     !r1,#$FC ;check for illegal command
2469 6B 05         12264                 Jr      Z,SprCnt_1
246B               12265                 
246B 98 E0        612266                 Ld      !r9,!r0
246D D6 04 80    2012267                 Call    Abort
2470               12268                 
2470 2C 15        612269 SprCnt_1:       Ld      !r2,#.HIBYTE. SprCount
2472 3C 45        612270                 Ld      !r3,#.LOWBYTE. SprCount
2474 82 12       1212271                 Lde     !r1,@!!r2 ;assume spare count increment
2476 1E           612272                 Inc     !r1
2477               12273                 
2477 A6 E0 00    1012274                 Cp      !r0,#0 ;check for Inc_SpareCount
247A 6B 12         12275                 Jr      Z,S_C_Spare
247C               12276                 
247C A0 E2       1012277                 Incw    !!r2 ;get address of BadCount
247E 82 12       1212278                 Lde     !r1,@!!r2 ;get bad block count
2480               12279                 
2480 A6 E0 01    1012280                 Cp      !r0,#01 ;check for Inc_BadBlock
2483 6B 04         12281                 Jr      Z,S_C_BadInc
2485               12282                 
2485 00 E1        612283                 Dec     !r1 ;otherwise Decrement bad block count
2487 8B 01         12284                 Jr      S_C_BadEnd
2489               12285                 
2489 1E           612286 S_C_BadInc:     Inc     !r1
248A 92 12       1212287 S_C_BadEnd:     Lde     @!!r2,!r1 ;store new count
248C 8B 02         12288                 Jr      SprCnt_End
248E               12289                 
248E 92 12       1212290 S_C_Spare:      Lde     @!!r2,!r1 ;store new count
2490 D6 24 96    2012291 SprCnt_End:     Call    Chk_SprCnt
2493 8D 04 5F      12292 SprCnt_Ret:     Jp      Bank_Ret
2496               12293 
2496               12294 
2496 2C 15        612295 Chk_SprCnt:     Ld      !r2,#.HIBYTE. SprCount
2498 3C 45        612296                 Ld      !r3,#.LOWBYTE. SprCount
249A 82 02       1212297                 Lde     !r0,@!!r2 ;get spare count
249C A0 E2       1012298                 Incw    !!r2
249E 82 12       1212299                 Lde     !r1,@!!r2 ;get bad count
24A0 02 01        612300                 Add     !r0,!r1 ;get total
24A2 A6 E0 47    1012301                 Cp      !r0,#71 ;check for spare count overflow
24A5 1B 06         12302                 Jr      Lt,Chk_Spr_Ret
24A7               12303                 
24A7 46 24 40    1012304                 Or      Excpt_Stat,#SprTbl_Warn
24AA D6 04 E1    2012305                 Call    SS_SprWarn
24AD               12306                 
24AD 8D 04 5F      12307 Chk_Spr_Ret:    Jp      Bank_Ret
24B0               12308 
24B0               12309                 .LSTOFF
24B0               12363                 .LSTON






        WIDGET.ASSEM            Page 195
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


24B0               12364                 .Page
24B0               12365                 .FIN
24B0               12366 ;>>>>>>>>>>>>>>>>>>>>>
24B0               12367 ;>
24B0               12368 ;>      Div3_19: Quotient := Dividend DIV 19
24B0               12369 ;>
24B0               12370 ;>      Local Variables:
24B0               12371 ;>              Divisor : 3 BYTES { !rC:E }
24B0               12372 ;>              Quotient : 3 BYTES { !r7:9 }
24B0               12373 ;>              Dividend : 3 BYTES { !r4:6 }
24B0               12374 ;>
24B0               12375 ;>      BEGIN
24B0               12376 ;>       Divisor := $013000 { 19 * 2^( 13 - 1 ) }
24B0               12377 ;>       Qoutient := 0
24B0               12378 ;>       FOR i := 1 TO 13 DO
24B0               12379 ;>        IF ( Dividend >= Divisor )
24B0               12380 ;>         THEN
24B0               12381 ;>              Dividend := Dividend - Divisor
24B0               12382 ;>              Quotient := ( Quotient * 2 ) + 1
24B0               12383 ;>         ELSE Quotient := ( Quotient * 2 )
24B0               12384 ;>       Divisor := Divisor DIV 2
24B0               12385 ;>      END
24B0               12386 ;>
24B0               12387 ;>>>>>>>>>>>>>>>>>>>>>
24B0 E6 4C 04    1012388 Div3_76:        Ld      ScrRegC,#$04 ;Divisor := $04C000
24B3 E6 4D C0    1012389                 Ld      ScrRegD,#$C0
24B6 E6 4E 00    1012390                 Ld      ScrRegE,#$00
24B9 8B 14         12391                 Jr      Div3_x
24BB               12392 
24BB E6 4C 02    1012393 Div3_38:        Ld      ScrRegC,#$02 ;Divisor := $026000
24BE E6 4D 60    1012394                 Ld      ScrRegD,#$60
24C1 E6 4E 00    1012395                 Ld      ScrRegE,#$00
24C4 8B 09         12396                 Jr      Div3_x
24C6               12397 
24C6               12398 
24C6 E6 4C 01    1012399 Div3_19:        Ld      ScrRegC,#$01 ;Divisor := $013000
24C9 E6 4D 30    1012400                 Ld      ScrRegD,#$30
24CC E6 4E 00    1012401                 Ld      ScrRegE,#$00
24CF               12402                 
24CF C9 44        612403 Div3_x:         Ld      ScrReg4,!rC ;pass dividend to routine
24D1 D9 45        612404                 Ld      ScrReg5,!rD
24D3 E9 46        612405                 Ld      ScrReg6,!rE
24D5               12406                 
24D5 70 FD         12407                 Push    Rp ;save context
24D7 31 40        612408                 Srp     #Wrk_Scr
24D9               12409                 
24D9 B0 E7        612410                 Clr     !r7 ;Quotient := 0
24DB B0 E8        612411                 Clr     !r8
24DD B0 E9        612412                 Clr     !r9
24DF               12413                 
24DF AC 0D        612414                 Ld      !rA,#13 ; FOR i := 1 TO 13 DO
24E1               12415                 
24E1 CF           612416 Div3_19_Lp:     Rcf             ;clear carry
24E2 10 E9        612417                 Rlc     !r9 ;Quotient := Quotient * 2





        WIDGET.ASSEM            Page 196
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


24E4 10 E8        612418                 Rlc     !r8
24E6 10 E7        612419                 Rlc     !r7
24E8               12420                  
24E8 08 E4        612421                  Ld     !r0,!r4 ;IF ( Dividend >= Divisor )
24EA 18 E5        612422                  Ld     !r1,!r5
24EC 28 E6        612423                  Ld     !r2,!r6
24EE D6 03 25    2012424                 Call    Sub3
24F1 7B 0F         12425                 Jr      C,Div3_19_Div2
24F3               12426                 
24F3 48 E0        612427                 Ld      !r4,!r0 ;Dividend := Dividend - Divisor
24F5 58 E1        612428                 Ld      !r5,!r1
24F7 68 E2        612429                 Ld      !r6,!r2
24F9               12430                 
24F9 06 E9 01    1012431                 Add     !r9,#1 ;quotient := quotient + 1
24FC 16 E8 00    1012432                 Adc     !r8,#0
24FF 16 E7 00    1012433                 Adc     !r7,#0
2502               12434                 
2502 CF           612435 Div_3_19_Div2:  Rcf             ;clear carry flag
2503 C0 EC        612436                 Rrc     !rC ;Divisor := Divisor DIV 2
2505 C0 ED        612437                 Rrc     !rD
2507 C0 EE        612438                 Rrc     !rE
2509               12439                 
2509 AA D6         12440                 Djnz    !rA,Div3_19_Lp
250B               12441                 
250B 50 FD       1012442                 Pop     Rp ;context switch
250D 08 47        612443                 Ld      !r0,ScrReg7 ;pass quotient to caller
250F 18 48        612444                 Ld      !r1,ScrReg8
2511 28 49        612445                 Ld      !r2,ScrReg9
2513 38 46        612446                 Ld      !r3,ScrReg6 ;pass back remainder
2515               12447                 
2515 8D 04 5F      12448                 Jp      Bank_Ret
2518               12449                 
2518               12450                 .LSTOFF
2518               12473                 .LSTON
2518               12474                 .FIN
2518               12475                 
2518               12476 MulR0_m:
2518 B0 EE        612477                 Clr     !rE     ;Result := !r0 * 256
251A D8 E0        612478                 Ld      !rD,!r0
251C B0 EC        612479                 Clr     !rC
251E               12480                 
251E               12481                 .LSTOFF
251E               12500                 .LSTON
251E               12501                 .FIN
251E               12502                 
251E 8D 04 5F      12503                 Jp      Bank_Ret
2521               12504                 
2521               12505                 .LSTOFF
2521               12528                 .LSTON
2521               12529                 .FIN
2521               12530                 
2521               12531 DivHdsSctrs:
2521               12532                 .DO     W_10MB
2521 D6 24 BB    2012533                 Call    Div3_38         ;return with !r0:2 = result





        WIDGET.ASSEM            Page 197
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2524               12534                                         ;            ScrReg4:6 = remainder
2524               12535                 .FIN
2524   --SKIP--    12536                 .DO     W_20MB + W_40MB
2524   --SKIP--    12537                 Call    Div3_76         ;return with !r0:2 = result
2524   --SKIP--    12538                                         ;            ScrReg4:6 = remainder
2524               12539                 .FIN
2524               12540                 
2524 08 E1        612541                 Ld      !r0,!r1 ;HiCyl := ..
2526 18 E2        612542                 Ld      !r1,!r2 ;LoCyl := .. {remainder in !r3}
2528 8D 04 5F      12543                 Jp      Bank_Ret
252B               12544                 
252B               12545                 .LSTOFF
252B               12580                 .LSTON














































        WIDGET.ASSEM            Page 198
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


252B               12581                 .Page
252B               12582                 .FIN
252B               12583                 
252B               12584 DivSctrs:
252B 0C 13        612585                 Ld      !r0,#NbrSctrs   ;load number of sectors into !r0
252D               12586                 
252D A2 30        612587                 Cp      !r3,!r0         ;check for A greater/equal
252F 1B 06         12588                 Jr      Lt,D_Sctrs1
2531               12589                 
2531 2C 01        612590                 Ld      !r2,#1          ;select head 1
2533 22 30        612591                 Sub     !r3,!r0
2535 8B 02         12592                 Jr      D_Sctrs2
2537               12593                 
2537 B0 E2        612594 D_Sctrs1:       Clr     !r2             ;select head 0
2539               12595                 
2539 AF          1412596 D_Sctrs2:       Ret
253A               12597 
253A               12598 
253A 70 EE         12599 ReMap_Sector:   Push    !rE ;save regs
253C 70 EF         12600                 Push    !rF
253E EC 16        612601                 Ld      !rE,#.HIBYTE. Map_Table
2540 FC 81        612602                 Ld      !rF,#.LOWBYTE. Map_Table
2542 02 F0        612603                 Add     !rF,!r0 ;index into table
2544 16 EE 00    1012604                 Adc     !rE,#0
2547 82 0E       1212605                 Lde     !r0,@!!rE ;get remapped sector
2549 50 EF       1012606                 Pop     !rF
254B 50 EE       1012607                 Pop     !rE
254D               12608                 
254D 8D 04 5F      12609                 Jp      Bank_Ret
2550               12610                 
2550               12611                 .LSTOFF
2550               12699                 .LSTON



























        WIDGET.ASSEM            Page 199
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2550               12700                 .Page
2550               12701                 .FIN
2550               12702 
2550               12703 Seek:
2550 D6 05 E8    2012704                 Call    Ext_Push
2553               12705                 
2553 E4 52 5C    1012706                 Ld      Lst_HiCyl,Cylinder ;save last seek address
2556 E4 53 5D    1012707                 Ld      Lst_LoCyl,Cylinder+1
2559 E4 54 5E    1012708                 Ld      Lst_Head,Head
255C E4 55 5F    1012709                 Ld      Lst_Sector,Sector
255F 56 56 EF    1012710                 And     DiskStat,#$FF-Parked
2562               12711                 
2562 76 56 02    1012712                 Tm      DiskStat,#SeekComplete ;check for head/arm motion
2565 6B 2E         12713                 Jr      Z,Seek_Wait
2567               12714                 
2567 1C 04        612715 Seek_ReTry:     Ld      !r1,#4
2569               12716                 
2569 8C 40        612717 Seek_Lp:         Ld     !r8,#Wait
256B D6 25 D3    2012718                 Call    PosHeads
256E EB 2A         12719                 Jr      Nz,Seek_End
2570               12720                 
2570 56 56 FE    1012721                 And     DiskStat,#$FF-Offset_On ;remove any offsets
2573 E6 57 90    1012722                 Ld      SeekType,#Access_Offset ;all reseek are with offset
2576               12723                 
2576 76 24 80    1012724                 Tm      Excpt_Stat,#Recovery
2579 6B 0D         12725                 Jr      Z,Seek_Abt
257B               12726                 
257B 70 E1         12727                 Push    !r1 ;save counter
257D 2C 00        612728                  Ld     !r2,#.HIBYTE. 20 ;wait 200 ms before retrying
257F 3C 14        612729                  Ld     !r3,#.LOWBYTE. 20
2581 D6 01 CE    2012730                 Call    MsWait
2584 50 E1       1012731                 Pop     !r1 ;get counter back
2586               12732                 
2586 1A E1         12733                 Djnz    !r1,Seek_Lp
2588               12734                 
2588 0C 00        612735 Seek_Abt:        Ld     !r0,#0 ;byte 0
258A 1C 02        612736                  Ld     !r1,#Stat_Srvo
258C D6 03 83    2012737                 Call    SetStatus
258F 46 56 02    1012738                 Or      DiskStat,#SeekComplete
2592 D6 04 80    2012739                 Call    Abort
2595               12740                 
2595 D6 25 B3    2012741 Seek_Wait:      Call    Wait_For_Rdy
2598 6B CF         12742                 Jr      Z,Seek_Lp
259A               12743 
259A 46 56 82    1012744 Seek_End:       Or      DiskStatus,#On_Track+Seek_Complete
259D C9 52        612745                 Ld      Cylinder,!rC
259F D9 53        612746                 Ld      Cylinder+1,!rD
25A1 D6 26 62    2012747                 Call    SelectHead
25A4 F9 55        612748                 Ld      Sector,!rF
25A6 A0 2A       1012749                 Incw    SeekCount
25A8               12750                 
25A8               12751                 
25A8 D6 27 3F    2012752                 Call    Chk_Offset
25AB 6B BC         12753                 Jr      Z,Seek_Lp





        WIDGET.ASSEM            Page 200
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


25AD               12754                 
25AD D6 06 07    2012755 Seek_Ret:       Call    Ext_Pop
25B0               12756                 
25B0 8D 04 5F      12757                 Jp      Bank_Ret
25B3               12758 
25B3               12759 ;*******************************
25B3               12760 
25B3 70 E1         12761 Wait_For_Rdy:   Push    !r1
25B5 1C 64        612762                 Ld      !r1,#100 ;wait for up to a second
25B7 56 FA DF    1012763 Seek_Wt:        And     Irq,#$FF-Timer1 ;clear old timer interrupts
25BA               12764 
25BA 76 02 40    1012765 Seek_Wt_Lp:     Tm      Port2,#SioRdy ;wait for the servo to come back
25BD 6B 08         12766                 Jr      Z,WtRdy_Tmr
25BF               12767                 
25BF D6 03 7C    2012768                 Call    Load_Status ;check for ServoReady
25C2 76 E0 20    1012769                 Tm      !r0,#ServoRdy
25C5 EB 09         12770                 Jr      Nz,WtRdy_End
25C7               12771 
25C7 76 FA 20    1012772 WtRdy_Tmr:      Tm      Irq,#Timer1 ;check for timer interrupt
25CA 6B EE         12773                 Jr      Z,Seek_Wt_Lp
25CC 00 E1        612774                 Dec     !r1
25CE EB E7         12775                 Jr      Nz,Seek_Wt
25D0               12776                 
25D0 50 E1       1012777 WtRdy_End:      Pop     !r1
25D2 AF          1412778                 Ret
25D3               12779 
25D3               12780                 .LSTOFF
25D3               12844                 .LSTON































        WIDGET.ASSEM            Page 201
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


25D3               12845                 .Page
25D3               12846                 .FIN
25D3               12847 
25D3               12848 PosHeads:
25D3 D6 05 E8    2012849                 Call    Ext_Push ;save callers variables
25D6               12850                 
25D6 EC 01        612851                  Ld     !rE,#1 ;do all servoing off of head 1
25D8 D6 26 62    2012852                 Call    SelectHead
25DB               12853                 
25DB D6 26 A5    2012854 PosHds_Rpt:     Call    ServoOk ;test if Servo is in a reasonable state
25DE 6B 6A         12855                 Jr      Z,PosHds_6 ;leave if servo can't be made useable
25E0               12856                 
25E0 D6 26 73    2012857                 Call    CalcMagDir
25E3 6B 61         12858                 Jr      Z,PosHds_5
25E5               12859                 
25E5 56 56 6C    1012860 PosHds_While:   And    DiskStatus,#$FF-SeekComplete-On_Track-Parked-Offset_On
25E8               12861 
25E8 A6 57 90    1012862                 Cp      Seek_Type,#Access_Offset
25EB 6B 14         12863                 Jr      Z,GtSk_LdAO
25ED               12864                 
25ED 76 24 80    1012865                 Tm      Excpt_Stat,#Recovery
25F0 E6 42 00    1012866                 Ld      ScrReg2,#0              ;default is no offsets
25F3 6B 14         12867                 Jr      Z,GtSk_LdNo
25F5               12868                 
25F5 D6 27 4F    2012869                 Call    Get_Zone
25F8 E6 42 00    1012870                 Ld      ScrReg2,#0              ;default is no offsets
25FB 1B 0C         12871                 Jr      Lt,GtSk_LdNo
25FD               12872                 
25FD 09 42        612873                 Ld      ScrReg2,!r0     ;set amount of offset
25FF 8B 03         12874                 Jr      GS_LdAO1
2601               12875                 
2601 E6 42 40    1012876 GtSk_LdAO:      Ld      ScrReg2,#Off_Auto
2604 E6 40 90    1012877 GS_LdAO1:       Ld      ScrReg0,#Access_Offset
2607 8B 03         12878                 Jr      GS_LdNo1
2609               12879 
2609 E6 40 80    1012880 GtSk_LdNo:      Ld      ScrReg0,#Access
260C 31 40        612881 GS_LdNo1:       Srp     #Wrk_Scr
260E 44 19 E0    1012882                 Or      !r0,Wrk_Sys+$09 ; Plus Direction
2611 44 15 E0    1012883                 Or      !r0,Wrk_Sys+$05 ; Plus Ms Magnitude
2614 18 16        612884                 Ld      !r1,Wrk_Sys+$06 ; Ls Magnitude
2616 3C 80        612885                 Ld      !r3,#S_Rate_57_6
2618 31 10        612886                 Srp     #Wrk_Sys
261A D6 03 93    2012887                 Call    Set_Dmt
261D D6 27 7F    2012888                 Call    ServoCmnd
2620 8F           612889                 Di                      ;Clear Dead_Man_Timer
2621               12890                 
2621 A6 57 90    1012891                 Cp      SeekType,#Access_Offset ;check for auto_offset
2624 EB 03         12892                 Jr      Nz,PosHds_4
2626               12893                 
2626 46 56 01    1012894                 Or      DiskStat,#Offset_On
2629               12895                 
2629 EC 61        612896 PosHds_4:       Ld      !rE,#.HIBYTE. 25000 ;intermidiate timer of 1sec
262B FC A8        612897                 Ld      !rF,#.LOWBYTE. 25000
262D D6 03 7C    2012898 PosHds_42:      Call    LoadStatus      ;sample ServoError





        WIDGET.ASSEM            Page 202
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2630 76 E0 10    1012899                 Tm      !r0,#ServoErr
2633 EB 11         12900                 Jr      Nz,PosHds_5      ;if servo error then exit
2635               12901                 
2635 76 E8 40    1012902 PosHds_3:       Tm      !r8,#Wait       ;IF Wait AND NOT( ServoRdy )
2638 6B 0C         12903                 Jr      Z,PosHds_5
263A               12904                 
263A 80 EE       1012905                 Decw    !!rE
263C 6B 08         12906                 Jr      Z,PosHds_5
263E               12907                 
263E 76 E0 20    1012908                 Tm      !r0,#ServoRdy   ; THEN loop until timeout OR ServoRdy
2641 6B EA         12909                 Jr      Z,PosHds_42
2643               12910 
2643 46 56 02    1012911                 Or      DiskStat,#SeekComplete
2646               12912 
2646 C9 50        612913 PosHds_5:       Ld      Cur_Cyl,!rC
2648 D9 51        612914                 Ld      Cur_Cyl+1,!rD
264A               12915 
264A D6 06 07    2012916 PosHds_6:       Call    Ext_Pop ;get caller's variables back
264D D6 26 53    2012917                 Call    Chk_SStat
2650 8D 04 5F      12918                 Jp      Bank_Ret
2653               12919                 
2653               12920 ;*********************
2653               12921 
2653 D6 03 7C    2012922 Chk_SStat:      Call    LoadStatus ;get current servo status
2656 18 E0        612923                 Ld      !r1,!r0    ;get copies of both ServoErr and ServoRdy
2658 60 E0        612924                 Com     !r0        ;ServoErr := NOT( ServoErr )
265A 90 E0        612925                 Rl      !r0        ;get ServoErr in same position as ServoRdy
265C 52 01        612926                 And     !r0,!r1    ;return AND( ServoRdy, NOT( ServoErr ) )
265E 56 E0 20    1012927                 And     !r0,#ServoRdy ;set zero flag
2661 AF          1412928                 Ret
2662               12929                 
2662               12930                 .LSTOFF
2662               12950                 .LSTON


























        WIDGET.ASSEM            Page 203
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2662               12951                 .Page
2662               12952                 .FIN
2662               12953 
2662 42 EE        612954 SelectHead:     Or      !rE,!rE ;test for Head0 or Head1
2664 6B 05         12955                 Jr      Z,Sel_Head0
2666 46 03 20    1012956                 Or      Port3,#Hs0       ;select head 1
2669 8B 03         12957                 Jr      SelHd_End
266B               12958         
266B 56 03 DF    1012959 Sel_Head0:      And     Port3,#$FF-Hs0   ;select head 0
266E E9 54        612960 SelHd_End:      Ld      Head,!rE
2670               12961 
2670 8D 04 5F      12962 SelHd_Ret:      Jp      Bank_Ret
2673               12963                 .LSTOFF
2673               13011                 .LSTON













































        WIDGET.ASSEM            Page 204
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2673               13012                 .Page
2673               13013                 .FIN
2673               13014 
2673               13015 CalcMagDir:
2673 18 50        613016                 Ld      !r1,Cur_Cyl
2675 28 51        613017                 Ld      !r2,Cur_Cyl+1
2677 22 2D        613018                 Sub     !r2,!rD ;get CurrentCylinder - Cylinder
2679 32 1C        613019                 Sbc     !r1,!rC
267B               13020                 
267B B0 E4        613021                 Clr     !r4     ;assume no seek needed
267D 1B 10         13022                 Jr      Lt,C_MagDir_Else
267F               13023                 
267F B0 E5        613024                 Clr     !r5     ;assume 0 track seek
2681 B0 E6        613025                 Clr     !r6
2683 9C 00        613026                 Ld      !r9,#0 ;set direction negative
2685               13027                 
2685 B0 E3        613028                 Clr     !r3     ;check for no seek condition
2687 42 32        613029                 Or      !r3,!r2
2689 42 31        613030                 Or      !r3,!r1
268B 6B 15         13031                 Jr      Z,C_MagDir_Ret
268D 8B 0C         13032                 Jr      S_Glbl_Cyl
268F               13033                 
268F 60 E2        613034 C_MagDir_Else:  Com     !r2     ;2's complement sutraction result
2691 60 E1        613035                 Com     !r1
2693 06 E2 01    1013036                 Add     !r2,#1
2696 16 E1 00    1013037                 Adc     !r1,#0
2699               13038                 
2699 9C 04        613039                 Ld      !r9,#Hd_Dir_Frwd     ;set direction positive
269B               13040                 
269B 58 E1        613041 S_Glbl_Cyl:     Ld      !r5,!r1 ;load magnitude
269D 68 E2        613042                 Ld      !r6,!r2
269F               13043                 
269F 46 E4 01    1013044                 Or      !r4,#01 ;set Seek
26A2 8D 04 5F      13045 C_MagDir_Ret:   Jp      Bank_Ret
26A5               13046 
26A5               13047                 .LSTOFF
26A5               13101                 .LSTON






















        WIDGET.ASSEM            Page 205
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


26A5               13102                 .Page
26A5               13103                 .FIN
26A5               13104 
26A5               13105 ServoOk:
26A5 76 24 80    1013106                 Tm      Excpt_Status,#Recovery         ;IF Recovery
26A8 6B 2A         13107                 Jr      Z,S_Ok_End
26AA               13108                 
26AA D6 03 7C    2013109                 Call    LoadStatus
26AD               13110                 
26AD 76 E0 10    1013111                 Tm      !r0,#ServoErr ;IF ServoError
26B0 6B 0D         13112                 Jr      Z,SOk_ChkRdy
26B2               13113                 
26B2 D6 26 DA    2013114 SOk_Err:        Call    Chk_MvWrData    ;save write data if Write_Op
26B5 0C 40        613115                  Ld     !r0,#DataRecal ;IF ServoErr AND NOT( ServoRdy )
26B7 D6 28 2A    2013116                 Call    Restore        ; THEN Restore
26BA D6 20 70    2013117                 Call    Buf2_To_WrBuf   ;assume write_op
26BD 8B 15         13118                 Jr      S_Ok_End
26BF               13119 
26BF 76 E0 20    1013120 SOk_ChkRdy:     Tm      !r0,#ServoRdy ;IF NOT( ServoErr )
26C2 EB 10         13121                 Jr      Nz,S_Ok_End   ; AND ServoRdy
26C4               13122                 
26C4 D6 26 DA    2013123 SOk_Park:       Call    Chk_MvWrData    ;save write data if Write_Op
26C7 D6 28 EA    2013124                 Call    ResetServo      ;otherwise un-park servo
26CA 0C 40        613125                  Ld     !r0,#DataRecal
26CC D6 28 2A    2013126                 Call    Restore
26CF D6 20 70    2013127                 Call    Buf2_To_WrBuf   ;assume write_op
26D2 8B 00         13128                 Jr      S_Ok_End
26D4               13129 
26D4 D6 26 53    2013130 S_Ok_End:       Call    Chk_SStat
26D7 8D 04 5F      13131                 Jp      Bank_Ret
26DA               13132                 
26DA               13133 ;********************
26DA               13134 
26DA 0C 00        613135 Chk_MvWrData:    Ld     !r0,#0 ;byte0
26DC 1C 02        613136                  Ld     !r1,#Stat_Srvo
26DE D6 03 83    2013137                 Call SetStatus
26E1               13138                 
26E1 76 56 20    1013139                 Tm      DiskStat,#Wr_Op ;check for write_op
26E4 6B 03         13140                 Jr      Z,MvWr_End
26E6               13141                 
26E6 D6 20 65    2013142                 Call    WrBuf_To_Buf2
26E9 AF          1413143 MvWr_End:       Ret
26EA               13144                 
26EA               13145                 .LSTOFF
26EA               13173                 .LSTON














        WIDGET.ASSEM            Page 206
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


26EA               13174                 .Page
26EA               13175                 .FIN
26EA               13176 
26EA               13177 Auto_Offset:
26EA D6 05 E8    2013178                  Call   Ext_Push
26ED 70 54         13179                  Push   Head    ;save the current head value
26EF               13180                  
26EF EC 01        613181                   Ld    !rE,#1  ;select head 1 for offsetting
26F1 D6 26 62    2013182                  Call   SelectHead
26F4               13183                  
26F4 D6 03 93    2013184                  Call    Set_Dmt ;set deadman timer
26F7               13185                 
26F7 31 40        613186                  Srp    #Wrk_Scr
26F9 0C 90        613187                  Ld     !r0,#Access_Offset
26FB 1C 00        613188                  Ld     !r1,#0
26FD 2C 40        613189                  Ld     !r2,#Off_Auto
26FF 3C 80        613190                  Ld     !r3,#S_Rate_57_6
2701 31 10        613191                  Srp    #Wrk_Sys
2703 D6 27 7F    2013192                 Call    ServoCmnd
2706               13193                 
2706 31 40        613194                  Srp    #Wrk_Scr
2708 0C 00        613195                  Ld     !r0,#ReadStatus
270A 1C 00        613196                  Ld     !r1,#0
270C 2C 00        613197                  Ld     !r2,#0
270E 3C 01        613198                  Ld     !r3,#1          ;read servo stat 1 to find offset value
2710 31 10        613199                  Srp    #Wrk_Sys
2712 D6 27 A5    2013200                 Call    ServoStatus
2715 D6 03 9F    2013201                 Call    Clr_Dmt
2718               13202                 
2718 2C 14        613203                 Ld      !r2,#.HIBYTE. (SStatus0+1) ;get offset amount
271A 3C B7        613204                 Ld      !r3,#.LOWBYTE. (SStatus0+1)
271C 82 02       1213205                 Lde     !r0,@!!r2
271E B6 E0 1F    1013206                 Xor     !r0,#$1F             ;get correct polarity
2721 56 E0 3F    1013207                 And     !r0,#$3F        ;mask off unwanted stuff
2724               13208                 
2724 70 E0         13209                  Push   !r0
2726 C8 52        613210                  Ld     !rC,Cylinder
2728 D8 53        613211                  Ld     !rD,Cylinder+1
272A D6 27 4F    2013212                 Call    Get_Zone
272D 50 E0       1013213                  Pop    !r0
272F 92 02       1213214                 Lde     @!!r2,!r0       ;store new value
2731               13215                 
2731 50 EE       1013216 Auto_Off_Ret:   Pop     !rE     ;re-select original head
2733 D6 26 62    2013217                 Call    SelectHead
2736 D6 06 07    2013218                 Call    Ext_Pop
2739               13219                 
2739 46 56 01    1013220                 Or      Disk_Stat,#Offset_On
273C 8D 04 5F      13221                 Jp      Bank_Ret
273F               13222                 
273F               13223 ;******************
273F               13224 
273F A6 57 90    1013225 Chk_Offset:     Cp      Seek_Type,#Access_Offset ;check if auto offset needed
2742 EB 08         13226                 Jr      Nz,Chk_Off_Ret
2744               13227                 





        WIDGET.ASSEM            Page 207
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2744 76 56 01    1013228 ChkOff_NoOff:   Tm      DiskStat,#Offset_On ;THEN check for offset already on
2747 EB 03         13229                 Jr      Nz,Chk_Off_Ret
2749               13230 
2749 D6 26 EA    2013231                 Call    Auto_Offset ;otherwise Auto_Offset
274C               13232                 
274C 8D 04 5F      13233 Chk_Off_Ret:    Jp      Bank_Ret
274F               13234                 
274F               13235                 .LSTOFF
274F               13268                 .LSTON


















































        WIDGET.ASSEM            Page 208
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


274F               13269                 .Page
274F               13270                 .FIN
274F               13271 
274F 08 EC        613272 Get_Zone:       Ld      !r0,!rC         ;use seek address for zone calc
2751 18 ED        613273                 Ld      !r1,!rD
2753 2C 05        613274                 Ld      !r2,#ZoneShift
2755 CF           613275                 Rcf
2756 C0 E0        613276 GtZn_Lp:        Rrc     !r0 ;rotate down the cylinder value
2758 C0 E1        613277                 Rrc     !r1
275A 2A FA         13278                 Djnz    !r2,GtZn_Lp
275C               13279                 
275C 2C 16        613280                 Ld      !r2,#.HIBYTE. Zone_Table
275E 3C 9A        613281                 Ld      !r3,#.LOWBYTE. Zone_Table
2760 02 31        613282                 Add     !r3,!r1         ;add offset to table
2762 16 E2 00    1013283                 Adc     !r2,#0
2765 82 02       1213284                 Lde     !r0,@!!r2       ;get offset value
2767               13285                 
2767 76 E0 20    1013286                 Tm      !r0,#Dir_Frwd   ;mask all but sign bit
276A 1C 80        613287                 Ld      !r1,#Off_Dir_Frwd ;assume forward
276C EB 02         13288                 Jr      Nz,GtZn_Push
276E               13289                 
276E 1C 00        613290                 Ld      !r1,#0  ;otherwise reverse
2770 56 E0 1F    1013291 GtZn_Push:      And     !r0,#$1F
2773 A6 E0 0A    1013292                 Cp      !r0,#MinOffset  ;check for lower bound on offset
2776 70 FC         13293                 Push    Flags
2778 42 01        613294                 Or      !r0,!r1 ;merge sign and magnitude
277A 50 FC       1013295                 Pop     Flags
277C 8D 04 5F      13296                 Jp      Bank_Ret
277F               13297                 
277F               13298                 .LSTOFF
277F               13364                 .LSTON




























        WIDGET.ASSEM            Page 209
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


277F               13365                 .Page
277F               13366                 .FIN
277F               13367                 
277F               13368 ServoCmnd:      
277F 31 30        613369                 Srp     #Wrk_Sys2
2781 D6 28 C3    2013370                 Call    Load_SrvoCmnd
2784               13371                 
2784 8C 04        613372 Srv_C_Lp1:      Ld      !r8,#4  ;SioRetry := 4
2786               13373                 
2786 48 40        613374                 Ld      !r4,ScrReg0 ;save command
2788 58 41        613375                 Ld      !r5,ScrReg1
278A A8 42        613376                 Ld      !rA,ScrReg2
278C B8 43        613377                 Ld      !rB,ScrReg3
278E               13378                 
278E D6 27 C7    2013379 Srv_C_Lp:       Call    ServoStore
2791 EB 0D         13380                 Jr      Nz,Srv_C_End
2793               13381                 
2793 49 40        613382                 Ld      ScrReg0,!r4 ;restore command
2795 59 41        613383                 Ld      ScrReg1,!r5
2797 A9 42        613384                 Ld      ScrReg2,!rA
2799 B9 43        613385                 Ld      ScrReg3,!rB
279B               13386                 
279B 8A F1         13387                 Djnz    !r8,Srv_C_Lp
279D               13388 
279D D6 04 80    2013389 Srv_C_Abort:    Call    Abort
27A0               13390                 
27A0 31 10        613391 Srv_C_End:      Srp     #Wrk_Sys
27A2 8D 04 5F      13392                 Jp      Bank_Ret
27A5               13393                 
27A5               13394                 .LSTOFF
27A5               13421                 .LSTON




























        WIDGET.ASSEM            Page 210
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


27A5               13422                 .Page
27A5               13423                 .FIN
27A5               13424                 
27A5               13425 ServoStatus:
27A5 70 E8         13426                 Push    !r8 ;save for caller
27A7 8C 04        613427                 Ld      !r8,#4 ;retry 4 times
27A9               13428                 
27A9 D6 27 7F    2013429 Srv_St_Lp1:     Call    ServoCmnd
27AC D6 28 04    2013430 Srv_St_Else:    Call    ServoLoad
27AF 6B 11         13431                 Jr      Z,Srv_St_End
27B1               13432                 
27B1 E4 34 40    1013433                 Ld      ScrReg0,Wrk_Sys2+$04
27B4 E4 35 41    1013434                 Ld      ScrReg1,Wrk_Sys2+$05
27B7 E4 3A 42    1013435                 Ld      ScrReg2,Wrk_Sys2+$0A
27BA E4 3B 43    1013436                 Ld      ScrReg3,Wrk_Sys2+$0B
27BD 8A EA         13437                 Djnz    !r8,Srv_St_Lp1
27BF               13438                 
27BF D6 04 80    2013439                 Call Abort
27C2               13440                 
27C2 50 E8       1013441 Srv_St_End:     Pop     !r8
27C4 8D 04 5F      13442                 Jp      Bank_Ret
27C7               13443                 
27C7               13444                 .LSTOFF
27C7               13496                 .LSTON



































        WIDGET.ASSEM            Page 211
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


27C7               13497                 .Page
27C7               13498                 .FIN
27C7               13499 
27C7 70 FD         13500 ServoStore:     Push    Rp ;save context
27C9 31 40        613501                 Srp     #Wrk_Scr
27CB               13502                 
27CB EC 14        613503                  Ld     !rE,#.HIBYTE. SrvoCmndBuffer
27CD FC B1        613504                  Ld     !rF,#.LOWBYTE. SrvoCmndBuffer
27CF 8C 04        613505                  Ld     !r8,#S_Cmnd_Len - 1
27D1 D6 05 67    2013506                 Call    Gen_Chk_Byte
27D4               13507                 
27D4 6C 0A        613508                 Ld      !r6,#10 ;Retry := 10
27D6               13509                 
27D6 EC 14        613510 Srvo_St_Rpt:    Ld      !rE,#.HIBYTE. SrvoCmndBuffer
27D8 FC B1        613511                 Ld      !rF,#.LOWBYTE. SrvoCmndBuffer
27DA               13512                 
27DA 4C 05        613513                 Ld      !r4,#S_Cmnd_Len
27DC               13514                 
27DC 76 02 40    1013515 Srvo_St_1:      Tm      Port2,#SioRdy   ; WHILE NOT( SioReady )
27DF 6B FB         13516                 Jr      Z,Srvo_St_1
27E1               13517                 
27E1 56 FA E7    1013518                 And     Irq,#$FF-Serial_Out-Serial_In     ;clear old interrupts
27E4               13519                 
27E4 82 0E       1213520                 Lde     !r0,@!!rE       ;get a command byte
27E6 09 F0        613521                 Ld      Sio,!r0         ;send it to Servo
27E8               13522                 
27E8 A0 EE       1013523                 Incw    !rE             ;point to next command byte
27EA               13524                 
27EA 76 FA 10    1013525 Srvo_St_2:      Tm      Irq,#Serial_Out ;WHILE ( IRQ.SerialOut = False )
27ED 6B FB         13526                 Jr      Z,Srvo_St_2
27EF               13527                 
27EF 4A EB         13528                 Djnz    !r4,Srvo_St_1   ;loop 'til all command bytes are sent
27F1               13529                 
27F1 56 FA EF    1013530                 And     Irq,#$FF-Serial_Out     ;clear old interrupts
27F4               13531                 
27F4 5C 50        613532                 Ld      !r5,#80         ;do a 250 usec wait
27F6 5A FE         13533 Srvo_Wt_1:      Djnz    !r5,Srvo_Wt_1
27F8               13534 
27F8 76 02 40    1013535                 Tm      Port2,#SioRdy   ;if NOT( SioReady ) then Servo 
27FB 6B 02         13536                 Jr      Z,Srvo_St_Exit  ; took the bytes and is munchin' on 'em
27FD               13537                 
27FD 6A D7         13538                 Djnz    !r6,Srvo_St_Rpt ;Retry := Retry - 1
27FF               13539                 
27FF 42 66        613540 Srvo_St_Exit:   Or      !r6,!r6         ;test for Retry = 0
2801 50 FD       1013541                 Pop     Rp ;return to original context
2803 AF          1413542                 Ret
2804               13543                 
2804               13544                 .LSTOFF
2804               13586                 .LSTON










        WIDGET.ASSEM            Page 212
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2804               13587                 .Page
2804               13588                 .FIN
2804               13589 
2804               13590 ServoLoad:
2804 70 FD         13591                 Push    Rp      ;save context
2806 31 40        613592                 Srp     #Wrk_Scr  ;context switch
2808               13593                 
2808 EC 14        613594                 Ld      !rE,#.HIBYTE. SStatus0
280A FC B6        613595                 Ld      !rF,#.LOWBYTE. SStatus0
280C               13596                 
280C 4C 05        613597                 Ld      !r4,#5  ;load i
280E               13598                 
280E 76 FA 08    1013599 Srvo_Ld_Wt:     Tm      Irq,#Serial_In
2811 6B FB         13600                 Jr      Z,Srvo_Ld_Wt
2813               13601                 
2813 56 FA F7    1013602                 And     Irq,#$FF-Serial_In      ;clear old interrupts
2816               13603                 
2816 08 F0        613604                 Ld      !r0,Sio         ;read SIO
2818 92 0E       1213605                 Lde     @!!rE,!r0       ; and store in buffer
281A               13606                 
281A A0 EE       1013607                 Incw    !!rE            ;point to next location in buffer
281C               13608                 
281C 4A F0         13609                 Djnz    !r4,Srvo_Ld_Wt  ;loop 'til all bytes are read
281E               13610                 
281E EC 14        613611                  Ld     !rE,#.HIBYTE. SStatus0 ;get original buffer ptr
2820 FC B6        613612                  Ld     !rF,#.LOWBYTE. SStatus0
2822 8C 04        613613                  Ld     !r8,#4          ;length of buffer
2824 D6 05 56    2013614                 Call   Chk_Chk_Byte
2827 50 FD       1013615                 Pop     Rp              ;context switch
2829 AF          1413616                 Ret
282A               13617                 
282A               13618                 .LSTOFF
282A               13657                 .LSTON


























        WIDGET.ASSEM            Page 213
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


282A               13658                 .Page
282A               13659                 .FIN
282A               13660 
282A               13661 Restore:
282A 70 E0         13662                  Push   !r0 ;save RecalType for later
282C D6 05 E8    2013663                  Call   Ext_Push
282F               13664                  
282F D6 03 93    2013665                  Call   Set_Dmt
2832               13666                  
2832 31 40        613667                  Srp    #Wrk_Scr
2834 50 E0       1013668                  Pop    !r0 ;save RecalType for later
2836 70 E0         13669                  Push   !r0
2838 B0 E1        613670                  Clr    !r1
283A B0 E2        613671                  Clr    !r2
283C 3C 80        613672                  Ld     !r3,#S_Rate_57_6
283E 31 10        613673                  Srp    #Wrk_Sys
2840 D6 27 7F    2013674                 Call    ServoCmnd
2843 D6 03 9F    2013675                 Call    Clr_Dmt
2846 56 56 7F    1013676                 And     DiskStat,#$FF-On_Track
2849 D6 29 56    2013677                 Call    Set_SeekNeeded
284C               13678                 
284C E6 50 02    1013679                 Ld      Cur_Cyl,#HiMaxCyl ;assume FormatRecal
284F E6 51 20    1013680                 Ld      Cur_Cyl+1,#LoMaxCyl
2852               13681                 
2852 50 E6       1013682                 Pop     !r6 ;load RecalType from storage
2854 A6 E6 70    1013683                 Cp      !r6,#FrmtRecal
2857 6B 06         13684                 Jr      Z,Rest_Up2
2859               13685                 
2859 E6 50 01    1013686                 Ld      Cur_Cyl,#Init_HiCyl ;otherwise DataRecal
285C E6 51 F9    1013687                 Ld      Cur_Cyl+1,#Init_LoCyl
285F               13688 
285F B0 E5        613689 Rest_Up2:       Clr     !r5
2861 4C D5        613690                 Ld      !r4,#$D5 ;max time to wait is two seconds
2863               13691                 
2863 D6 03 7C    2013692 Restore_Lp:     Call    LoadStatus
2866 76 E0 20    1013693                 Tm      !r0,#ServoRdy
2869 EB 08         13694                 Jr      Nz,Rest_UpDate
286B 80 E4       1013695                 Decw    !!r4
286D EB F4         13696                 Jr      Nz,Restore_Lp
286F               13697                 
286F B0 E0        613698                 Clr     !r0             ;pass error status to exit
2871 8B 17         13699                 Jr      Restore_End
2873               13700                 
2873 76 56 40    1013701 Rest_UpDate:    Tm      DiskStat,#RdHdrRecal
2876 6B 10         13702                 Jr      Z,Rest_Up1
2878 A6 E6 70    1013703                 Cp      !r6,#FrmtRecal ;don't try to read headers here!
287B 6B 0B         13704                 Jr      Z,Rest_Up1
287D               13705                 
287D D6 20 EB    2013706                 Call    UpDate_Cur_Cyl
2880 EB 06         13707                 Jr      Nz,Rest_Up1 ;leave if positioned correctly
2882               13708                 
2882 D6 04 DB    2013709                 Call    SS_NoHdr ;header err here is bad news!
2885 D6 04 80    2013710                 Call    Abort
2888               13711 





        WIDGET.ASSEM            Page 214
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2888 0C 01        613712 Rest_Up1:       Ld      !r0,#1
288A 70 E0         13713 Restore_End:    Push    !r0 ;save result
288C D6 06 07    2013714                 Call    Ext_Pop
288F 56 56 6E    1013715                 And     DiskStat,#$FF-Offset_On-Parked-On_Track
2892 46 56 02    1013716                 Or      DiskStat,#SeekComplete
2895 50 E0       1013717                 Pop     !r0
2897 42 00        613718                 Or      !r0,!r0 ;set zero flag
2899 8D 04 5F      13719                 Jp      Bank_Ret
289C               13720                 
289C               13721                 .LSTOFF
289C               13773                 .LSTON
















































        WIDGET.ASSEM            Page 215
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


289C               13774                 .Page
289C               13775                 .FIN
289C               13776 
289C               13777 SrvoRcvry:
289C D6 05 E8    2013778                 Call    Ext_Push    ;save caller's stuff
289F               13779                 
289F 8C 04        613780                 Ld      !r8,#4  ;i := 8
28A1               13781                 
28A1 D6 06 58    2013782 Srvo_R_Rpt:     Call    Zero_Header
28A4 D6 26 53    2013783                 Call    Chk_SStat
28A7 EB 03         13784                 Jr      Nz,Srvo_R_Sok
28A9               13785                 
28A9 D6 26 A5    2013786                 Call    ServoOk
28AC               13787                 
28AC D6 21 66    2013788 Srvo_R_Sok:     Call    UpDate_Hdr ; IF ReadHdr.Cylinder <> Cylinder...
28AF EB 0C         13789                 Jr      Nz,Srvo_R_Leave
28B1               13790                 
28B1 0C 01        613791                  Ld     !r0,#1 ;byte1
28B3 1C 02        613792                  Ld     !r1,#Stat_Seek
28B5 D6 03 83    2013793                 Call    Set_Status
28B8               13794                 
28B8 D6 05 03    2013795                 Call    ReSeek
28BB               13796                  
28BB 8A E4         13797 Srvo_DecI:      Djnz    !r8,Srvo_R_Rpt
28BD               13798 
28BD D6 06 07    2013799 Srvo_R_Leave:   Call    Ext_Pop     ;get user's stuff back
28C0 8D 04 5F      13800                 Jp      Bank_Ret
28C3               13801                 
28C3               13802                 .LSTOFF
28C3               13825                 .LSTON





























        WIDGET.ASSEM            Page 216
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


28C3               13826                 .Page
28C3               13827                 .FIN
28C3               13828 
28C3               13829 Load_SrvoCmnd:
28C3 2C 14        613830                 Ld      !r2,#.HIBYTE. SrvoCmndBuf
28C5 3C B1        613831                 Ld      !r3,#.LOWBYTE. SrvoCmndBuf
28C7 1C 04        613832                 Ld      !r1,#4 ;load 4 bytes
28C9 0C 40        613833                 Ld      !r0,#ScrReg0 ;start with what's in ScrReg0
28CB               13834                 
28CB 93 02       1813835 Ld_S_Cmnd_Lp:   Ldei    @!!r2,@!r0
28CD 1A FC         13836                 Djnz    !r1,Ld_S_Cmnd_Lp
28CF               13837                 
28CF AF          1413838                 Ret
28D0               13839                 
28D0               13840                 .LSTOFF
28D0               13869                 .LSTON











































        WIDGET.ASSEM            Page 217
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


28D0               13870                 .Page
28D0               13871                 .FIN
28D0               13872 
28D0               13873 Park_Heads:
28D0 E6 57 80    1013874                  Ld     SeekType,#Access
28D3 CC 02        613875                  Ld     !rC,#HiParkCyl
28D5 DC 35        613876                  Ld     !rD,#LowParkCyl
28D7 B0 EE        613877                  Clr    !rE
28D9 B0 EF        613878                  Clr    !rF
28DB D6 25 50    2013879                 Call    Seek
28DE               13880                 
28DE 46 56 10    1013881                 Or      DiskStat,#Parked
28E1 56 56 7F    1013882                 And     DiskStat,#$FF-On_Track
28E4 D6 29 56    2013883                 Call    Set_SeekNeeded
28E7 8D 04 5F      13884                 Jp      Bank_Ret
28EA               13885                 
28EA               13886                 .LSTOFF
28EA               13933                 .LSTON









































        WIDGET.ASSEM            Page 218
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


28EA               13934                 .Page
28EA               13935                 .FIN
28EA               13936 
28EA               13937 ResetServo:
28EA 56 00 EF    1013938                 And     Port0,#$FF-Not_ServoRst ;set Servo Reset
28ED               13939                 
28ED 2C 00        613940 S_Rst_Lp1:       Ld     !r2,#.HIBYTE. 5 ;busy wait for 50 msec
28EF 3C 05        613941                  Ld     !r3,#.LOWBYTE. 5
28F1 D6 01 CE    2013942                 Call    MsWait
28F4               13943                 
28F4 46 00 10    1013944                 Or      Port0,#Not_ServoRst ;clear Servo Reset
28F7               13945 
28F7 2C 00        613946                  Ld     !r2,#.HIBYTE. 100 ;busy wait for 1 sec
28F9 3C 64        613947                  Ld     !r3,#.LOWBYTE. 100
28FB D6 01 CE    2013948                 Call    MsWait
28FE               13949                 
28FE D6 03 7C    2013950 S_Rst_1:        Call    LoadStatus ;get servo status
2901 76 E0 10    1013951                 Tm      !r0,#ServoErr
2904 6B 05         13952                 Jr      Z,S_Rst_Bd1
2906               13953                 
2906 A8 E0        613954 S_Rst_Abt1:      Ld     !rA,!r0
2908 D6 04 80    2013955                 Call    Abort
290B               13956                 
290B 56 F1 FD    1013957 S_Rst_Bd1:      And     Tmr,#$FF-T0_CntEn        ;halt T0
290E E6 F5 0D    1013958                 Ld      Pre0,#$D ;Pre0 := Mod-64,continuous;go to 19.2k baud
2911 E6 F4 01    1013959                 Ld      T0,#1   ;interrupt after 1 byte
2914 46 F1 03    1013960                 Or      Tmr,#T0_CntEn + T0_Load
2917               13961                 
2917 D6 03 93    2013962                 Call    Set_Dmt
291A 31 40        613963                  Srp    #Wrk_Scr
291C 0C 00        613964                  Ld     !r0,#ReadStatus  ;try talking to the Servo
291E B0 E1        613965                  Clr    !r1
2920 B0 E2        613966                  Clr    !r2
2922 3C 81        613967                  Ld     !r3,#S_Norm_Status + S_Rate_57_6
2924 31 10        613968                  Srp    #Wrk_Sys
2926 D6 28 C3    2013969                 Call    Load_SrvoCmnd
2929 D6 27 C7    2013970                 Call    ServoStore
292C 6B 08         13971                 Jr      Z,S_Rst_Comm
292E D6 03 7C    2013972                 Call    Load_Status
2931 76 E0 10    1013973                 Tm      !r0,#ServoErr
2934 6B 07         13974                 Jr      Z,S_Rst_Ld
2936               13975                 
2936 AC 00        613976 S_Rst_Comm:      Ld     !rA,#S_Store
2938 8C 03        613977 S_Rst_Abt2:      Ld     !r8,#S_Rst_Abort
293A D6 04 80    2013978                 Call   Abort
293D               13979                 
293D D6 28 04    2013980 S_Rst_Ld:       Call    ServoLoad
2940 7C 01        613981                  Ld     !r7,#S_Load
2942 EB F4         13982                 Jr      Nz,S_Rst_Abt2
2944 D6 03 9F    2013983                 Call    Clr_Dmt
2947               13984 
2947 56 F1 FD    1013985                 And     Tmr,#$FF-T0_CntEn        ;halt T0
294A E6 F5 05    1013986                 Ld      Pre0,#$5 ;Pre0 := 1,continuous run ;go to 57.6k baud
294D E6 F4 01    1013987                 Ld      T0,#1





        WIDGET.ASSEM            Page 219
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2950 46 F1 03    1013988                 Or      Tmr,#T0_CntEn + T0_Load
2953               13989                 
2953 8D 04 5F      13990 S_Rst_2:        Jp      Bank_Ret
2956               13991 
2956               13992                 .LSTOFF
2956               14020                 .LSTON





















































        WIDGET.ASSEM            Page 220
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2956               14021                 .Page
2956               14022                 .FIN
2956               14023 
2956               14024 Set_SeekNeeded:
2956 2C 16        614025                 Ld      !r2,#.HIBYTE. CachStat
2958 3C E8        614026                 Ld      !r3,#.LOWBYTE. CachStat
295A 1C 14        614027                 Ld      !r1,#CacheLength
295C               14028 
295C 82 02       1214029 S_SeekN_Lp:     Lde     !r0,@!!r2 ;get array value
295E 46 E0 80    1014030                 Or      !r0,#CachSeek
2961 92 02       1214031                 Lde     @!!r2,!r0
2963 A0 E2       1014032                 Incw    !!r2
2965 1A F5         14033                 Djnz    !r1,S_SeekN_Lp
2967               14034                 
2967 8D 04 5F      14035                 Jp      Bank_Ret
296A               14036                 
296A               14037                 .LSTOFF
296A               14059                 .LSTON









































        WIDGET.ASSEM            Page 221
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


296A               14060                 .Page
296A               14061                 .FIN
296A               14062                 
296A 46 24 80    1014063 SelfTest:       Or      Excpt_Stat,#Recovery ;try our best to pass this test
296D               14064 
296D 76 24 10    1014065                 Tm      Excpt_Stat,#PwrRst ;check for power reset
2970 6B 0E         14066                 Jr      Z,ST_MtrSpd
2972               14067                 
2972 08 38        614068                 Ld      !r0,Scr_Cntr ;otherwise finish time on disk speed
2974 44 39 E0    1014069                 Or      !r0,Scr_Cntr+1
2977 6B 07         14070                 Jr      Z,ST_MtrSpd
2979               14071                 
2979 28 38        614072                  Ld     !r2,Scr_Cntr
297B 38 39        614073                  Ld     !r3,Scr_Cntr+1
297D D6 01 CE    2014074                 Call    MsWait
2980               14075 
2980 D6 29 B5    2014076 ST_MtrSpd:      Call    MtrSpd
2983 6B 09         14077                 Jr      Z,ST_Mtr_Gd
2985               14078                 
2985 2C 05        614079                  Ld     !r2,#.HIBYTE. 1500 ;wait another 15 seconds
2987 3C DC        614080                  Ld     !r3,#.LOWBYTE. 1500
2989 D6 29 B5    2014081                 Call    MtrSpd
298C EB 24         14082                 Jr      Nz,Slf_Leave
298E               14083                 
298E 56 25 DF    1014084 ST_Mtr_Gd:      And     SlfTst_Result,#$FF-Disk_Speed
2991               14085 
2991 D6 29 F9    2014086 Slf_Tracks:     Call    TrackCount
2994 56 25 EF    1014087                 And     SlfTst_Result,#$FF-Servo_Fail
2997               14088                 
2997 D6 2A 10    2014089 Slf_Sectors:    Call    SctrCount
299A EB 16         14090                 Jr      Nz,Slf_Leave
299C               14091                 
299C 56 25 F7    1014092                 And     SlfTst_Result,#$FF-Sector_Cnt
299F               14093                 
299F D6 03 7C    2014094 Slf_State:      Call    Load_Status ;check state machine static state
29A2 56 E0 0F    1014095                 And     !r0,#YMask
29A5 EB 0B         14096                 Jr      Nz,Slf_Leave
29A7               14097                 
29A7 56 25 FB    1014098                 And     SlfTst_Result,#$FF-State_Fail
29AA               14099                 
29AA D6 2A 31    2014100 Slf_RwTest:     Call    RwTest ;see if we can read and write
29AD 6B 03         14101                 Jr      Z,Slf_Leave
29AF               14102                 
29AF 56 25 FD    1014103                 And     SlfTst_Result,#$FF-Rw_Fail
29B2               14104                 
29B2 8D 04 5F      14105 Slf_Leave:      Jp      Bank_Ret
29B5               14106 
29B5               14107                 .LSTOFF
29B5               14128                 .LSTON










        WIDGET.ASSEM            Page 222
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


29B5               14129                 .Page
29B5               14130                 .FIN
29B5               14131                 
29B5               14132 
29B5 56 FA FE    1014133 MtrSpd:         And     Irq,#$FF-Irq_Index ;clear old event
29B8               14134 
29B8 0C 01        614135                 Ld      !r0,#1 ;assume failure
29BA 4C 06        614136                 Ld      !r4,#.HIBYTE. 1600 ;load dead man timer
29BC 5C 40        614137                 Ld      !r5,#.LOWBYTE. 1600
29BE               14138                 
29BE 2C 2A        614139                 Ld      !r2,#.HIBYTE. 11000 ;timeout after about 4 rotations
29C0 3C F8        614140                 Ld      !r3,#.LOWBYTE. 11000
29C2               14141                 
29C2 76 FA 01    1014142 MtrSpd_1:       Tm      Irq,#Irq_Index ;wait for index to come around
29C5 EB 06         14143                 Jr      Nz,MtrSpd_2
29C7 80 E2       1014144                 Decw    !!r2
29C9 EB F7         14145                 Jr      Nz,MtrSpd_1
29CB 8B 29         14146                 Jr      MtrSpd_Lv
29CD               14147                 
29CD 56 FA FA    1014148 MtrSpd_2:       And     Irq,#$FF-Irq_Index-Irq_Sector ;clear events
29D0 B0 E0        614149                 Clr     !r0 ;clear counter
29D2 B0 E1        614150                 Clr     !r1 ;clear counter
29D4               14151                 
29D4 76 FA 01    1014152 MtrSpd_Lp:      Tm      Irq,#Irq_Index ;wait for one rev
29D7 EB 06         14153                 Jr      Nz,MtrSpd_End
29D9 A0 E0       1014154                 Incw    !!r0            ;.0142 ms/lp or 70.4 cnts/ms
29DB 80 E4       1014155                 Decw    !!r4
29DD EB F5         14156                 Jr      Nz,MtrSpd_Lp
29DF               14157                 
29DF E8 E1        614158 MtrSpd_End:      Ld     !rE,!r1
29E1 D8 E0        614159                  Ld     !rD,!r0
29E3 CC 00        614160                  Ld     !rC,#0
29E5 D6 24 C6    2014161                 Call    Div3_19 ;get speed within tolerence in !r2
29E8               14162                 .LSTOFF
29E8               14164                 .LSTON
29E8 0C 01        614165                 Ld      !r0,#1 ;assume failure
29EA A6 E2 44    1014166                 Cp      !r2,#$44 ;accepts speeds between 18.5 ms and 20.5 ms
29ED 1B 07         14167                 Jr      Lt,MtrSpd_Lv
29EF A6 E2 4C    1014168                 Cp      !r2,#$4C
29F2 AB 02         14169                 Jr      Gt,MtrSpd_Lv
29F4 0C 00        614170                 Ld      !r0,#0 ;otherwise pass
29F6               14171                 .FIN
29F6   --SKIP--    14172                 .DO     W_20MB+W_40MB
29F6   --SKIP--    14173                 .LSTON
29F6   --SKIP--    14174                 Ld      !r0,#1 ;assume failure
29F6   --SKIP--    14175                 Cp      !r2,#$44 ;accepts speeds between 18.5 ms and 20.5 ms
29F6   --SKIP--    14176                 Jr      Lt,MtrSpd_Lv
29F6   --SKIP--    14177                 Cp      !r2,#$4C
29F6   --SKIP--    14178                 Jr      Gt,MtrSpd_Lv
29F6   --SKIP--    14179                 Ld      !r0,#0 ;otherwise pass
29F6               14180                 .FIN
29F6               14181                 
29F6 42 00        614182 MtrSpd_Lv:      Or      !r0,!r0 ;set flags
29F8 AF          1414183                 Ret





        WIDGET.ASSEM            Page 223
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


29F9               14184                 
29F9               14185                 .LSTOFF
29F9               14212                 .LSTON
























































        WIDGET.ASSEM            Page 224
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


29F9               14213                 .Page
29F9               14214                 .FIN
29F9               14215 
29F9               14216 TrackCount:
29F9 D6 28 EA    2014217                 Call    ResetServo ;try to get the servo in a nice state
29FC               14218                 
29FC 56 56 BF    1014219                 And     DiskStat,#$FF-RdHdrRecal ;don't read any headers!
29FF               14220                 
29FF 0C 40        614221                  Ld     !r0,#DataRecal
2A01 D6 28 2A    2014222                 Call    Restore
2A04               14223                 
2A04 CC 00        614224                  Ld     !rC,#0 ;cylinder = 0
2A06 DC 69        614225                  Ld     !rD,#$69
2A08 EC 00        614226                  Ld     !rE,#0 ;head = 0
2A0A FC 00        614227                  Ld     !rF,#0 ;sector = 0
2A0C D6 25 50    2014228                 Call    Seek
2A0F AF          1414229                 Ret
2A10               14230                 
2A10               14231                 .LSTOFF
2A10               14252                 .LSTON







































        WIDGET.ASSEM            Page 225
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2A10               14253                 .Page
2A10               14254                 .FIN
2A10               14255 
2A10               14256 SctrCount:
2A10 B0 E2        614257                 Clr     !r2 ;count := 0
2A12               14258                 
2A12 56 FA FE    1014259                 And     Irq,#$FF-Irq_Index ;clear old index marks
2A15               14260 
2A15 76 FA 01    1014261 S_Cnt_1:        Tm      Irq,#Irq_Index ;wait for index mark
2A18 6B FB         14262                 Jr      Z,S_Cnt_1
2A1A               14263                 
2A1A 56 FA FD    1014264                 And     Irq,#Irq_Index-Irq_Sector ;clear old events
2A1D               14265                 
2A1D 76 03 04    1014266 S_Cnt_3:        Tm      Port3,#IndexMark ;While NOT( Index )
2A20 EB 0B         14267                 Jr      Nz,S_Cnt_End
2A22 76 FA 04    1014268                 Tm      Irq,#Irq_Sector
2A25 6B F6         14269                 Jr      Z,S_Cnt_3
2A27 2E           614270                 Inc     !r2 ;bump the sector count
2A28 56 FA FB    1014271                 And     Irq,#$FF-Irq_Sector
2A2B 8B F0         14272                 Jr      S_Cnt_3
2A2D               14273                 
2A2D A6 E2 13    1014274 S_Cnt_End:      Cp      !r2,#NbrSctrs
2A30               14275                 
2A30 AF          1414276                 Ret
2A31               14277                 
2A31               14278                 .LSTOFF
2A31               14320                 .LSTON
































        WIDGET.ASSEM            Page 226
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2A31               14321                 .Page
2A31               14322                 .FIN
2A31               14323 
2A31               14324 RwTest:
2A31 46 56 40    1014325                 Or      DiskStat,#RdHdrRecal
2A34 0C 40        614326                  Ld     !r0,#DataRecal
2A36 D6 28 2A    2014327                 Call    Restore
2A39 5C 00        614328                  Ld     !r5,#0
2A3B 6B 46         14329                 Jr      Z,RwTest_End
2A3D               14330 
2A3D CC 02        614331 RwTest1:         Ld     !rC,#Tst_HiCyl
2A3F DC 05        614332                  Ld     !rD,#Tst_LoCyl
2A41 EC 00        614333                  Ld     !rE,#Tst_Head
2A43 FC 00        614334                  Ld     !rF,#Tst_Sctr
2A45 D6 25 50    2014335                 Call    Seek
2A48               14336                 
2A48 5C 13        614337                 Ld      !r5,#NbrSctrs
2A4A               14338                 
2A4A D6 06 58    2014339 RwTest_Lp:      Call    Zero_Header
2A4D               14340                 
2A4D 70 E5         14341                 Push    !r5
2A4F 46 56 20    1014342                  Or     DiskStat,#Wr_Op
2A52 2C 10        614343                  Ld     !r2,#.HIBYTE. WrBlk_Vector
2A54 3C 84        614344                  Ld     !r3,#.LOWBYTE. WrBlk_Vector
2A56 D6 04 10    2014345                 Call    Bank_Call
2A59 50 E5       1014346                 Pop     !r5
2A5B 6B 22         14347                 Jr      Z,Rw_Next
2A5D               14348                 
2A5D E6 27 0A    1014349                 Ld      RdErrCnt,#10 ;assume a failure
2A60 70 E5         14350                 Push    !r5
2A62 56 56 DF    1014351                  And    DiskStat,#$FF-Wr_Op
2A65 2C 10        614352                  Ld     !r2,#.HIBYTE. RdBlk_Vector
2A67 3C 8A        614353                  Ld     !r3,#.LOWBYTE. RdBlk_Vector
2A69 D6 04 10    2014354                 Call    Bank_Call
2A6C 50 E5       1014355                 Pop     !r5
2A6E EB 13         14356                 Jr      Nz,RwTest_End
2A70               14357                 
2A70 76 E0 10    1014358                 Tm      !r0,#RdNoHdrFnd
2A73 EB 0A         14359                 Jr      Nz,Rw_Next
2A75 08 27        614360                 Ld      !r0,RdErrCnt
2A77 56 E0 0F    1014361                 And     !r0,#$0F ;mask off unwanted status
2A7A A6 E0 0A    1014362                 Cp      !r0,#10
2A7D EB 04         14363                 Jr      Nz,RwTest_End
2A7F               14364                 
2A7F 20 55        614365 Rw_Next:        Inc     Sector
2A81 5A C7         14366                 Djnz    !r5,RwTest_Lp
2A83               14367                 
2A83 D6 28 D0    2014368 RwTest_End:     Call    Park_Heads
2A86               14369                 
2A86 42 55        614370                 Or      !r5,!r5 ;set zero flag
2A88 AF          1414371                 Ret
2A89               14372                 
2A89               14373                 .LSTOFF
2A89               14435                 .LSTON





        WIDGET.ASSEM            Page 227
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2A89               14436                 .Page
2A89               14437                 .FIN
2A89               14438 
2A89               14439 Load_Cache:
2A89 4C 14        614440                 Ld      !r4,#CacheLength
2A8B 5C 00        614441                 Ld      !r5,#0 ;clear seekneeded, headchange booleans
2A8D E6 58 02    1014442                 Ld      Data_Type,#User_Type
2A90               14443                 
2A90 8C 16        614444                 Ld      !r8,#.HIBYTE. CachStat
2A92 9C E8        614445                 Ld      !r9,#.LOWBYTE. CachStat
2A94 AC 16        614446                 Ld      !rA,#.HIBYTE. CacheArray
2A96 BC FC        614447                 Ld      !rB,#.LOWBYTE. CacheArray
2A98               14448                  
2A98 D6 05 46    2014449                 Call    Load_Logical
2A9B               14450                 
2A9B 2C 17        614451                  Ld     !r2,#.HIBYTE. TLBlock
2A9D 3C 51        614452                  Ld     !r3,#.LOWBYTE. TLBlock
2A9F D6 2B C3    2014453                 Call    St_Blk
2AA2               14454                 
2AA2 D6 2B CB    2014455                 Call    Ld_C_Srch
2AA5 70 FC         14456                  Push   Flags   ;save result of spare table search
2AA7 70 E0         14457                  Push   !r0
2AA9 2C 17        614458                  Ld     !r2,#.HIBYTE. PBlock
2AAB 3C 4E        614459                  Ld     !r3,#.LOWBYTE. PBlock
2AAD D6 2B C3    2014460                 Call    St_Blk
2AB0 D6 2B 77    2014461                 Call    Cache_Cnvrt
2AB3 50 E0       1014462                  Pop    !r0
2AB5 50 FC       1014463                  Pop    Flags
2AB7 B0 E1        614464                 Clr     !r1 ;SeekNeeded,HdChg := False
2AB9 EB 1A         14465                 Jr      Nz,Ld_Cache_In
2ABB 8D 2B 33*09   14466                 Jp      Ld_C_Enter
2ABE               14467                 
2ABE 2C 17        614468 Ld_Cache_Lp:     Ld     !r2,#.HIBYTE. PBlock
2AC0 3C 4E        614469                  Ld     !r3,#.LOWBYTE. PBlock
2AC2 D6 2B A3    2014470                 Call    Inc_Blk
2AC5 2C 17        614471                  Ld     !r2,#.HIBYTE. TLBlock
2AC7 3C 51        614472                  Ld     !r3,#.LOWBYTE. TLBlock
2AC9 D6 2B A3    2014473                 Call    Inc_Blk
2ACC               14474                 
2ACC D6 2B CB    2014475                 Call    Ld_C_Srch
2ACF 6B 09         14476                 Jr      Z,Cache_NoSpare
2AD1               14477                 
2AD1 1C 80        614478                  Ld     !r1,#CachSeek
2AD3 42 51        614479                  Or     !r5,!r1 ;set seekneeded
2AD5 D6 2B 3F    2014480 Ld_Cache_In:    Call    Enter_Cache
2AD8 8B 5E         14481                 Jr      Ld_Cache_More
2ADA               14482                 
2ADA 31 30        614483 Cache_NoSpare:  Srp     #Wrk_Sys2
2ADC 98 1C        614484                 Ld      !r9,Wrk_Sys+$0C
2ADE A8 1D        614485                 Ld      !rA,Wrk_Sys+$0D
2AE0 B8 1E        614486                 Ld      !rB,Wrk_Sys+$0E
2AE2 2C 17        614487                  Ld     !r2,#.HIBYTE. PBlock
2AE4 3C 4E        614488                  Ld     !r3,#.LOWBYTE. PBlock
2AE6 0C 3C        614489                  Ld     !r0,#Wrk_Sys2+$0C





        WIDGET.ASSEM            Page 228
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2AE8 D6 2B 9C    2014490                 Call    Gt_3_Ldei
2AEB 22 EB        614491                 Sub     !rE,!rB ;IF ( TPBlock <> PBlock ) 
2AED 32 DA        614492                 Sbc     !rD,!rA
2AEF 32 C9        614493                 Sbc     !rC,!r9
2AF1 42 CD        614494                 Or      !rC,!rD
2AF3 42 CE        614495                 Or      !rC,!rE
2AF5 70 FC         14496                 Push    Flags
2AF7 31 10        614497                 Srp     #Wrk_Sys
2AF9               14498                 
2AF9 2C 17        614499                  Ld     !r2,#.HIBYTE. PBlock
2AFB 3C 4E        614500                  Ld     !r3,#.LOWBYTE. PBlock
2AFD D6 2B C3    2014501                 Call    St_Blk
2B00 50 FC       1014502                 Pop     Flags
2B02 EB 20         14503                 Jr      Nz,Ld_Cach_Seek
2B04               14504                 
2B04 D6 2B 94    2014505                 Call    Gt_THS ;load current seek address
2B07 FE           614506                 Inc     !rF ;bump the sector address
2B08 A6 EF 13    1014507                 Cp      !rF,#NbrSctrs
2B0B 9B 07         14508                 Jr      Ge,Ld_Cach_HdChg
2B0D               14509                 
2B0D D6 2B 85    2014510                 Call    St_THS ;save new seek address
2B10 B0 E1        614511                  Clr    !r1 ;CacheSeek, CachHdChg := False
2B12 8B 1F         14512                 Jr      Ld_C_Enter
2B14               14513                 
2B14 FC 00        614514 Ld_Cach_HdChg:  Ld      !rF,#0 ;start at sector 0
2B16 A6 EE 00    1014515                 Cp      !rE,#0 ;check for head 0
2B19 EB 09         14516                 Jr      Nz,Ld_Cach_Seek
2B1B               14517                 
2B1B EC 01        614518                  Ld      !rE,#1 ;otherwise go to head 1
2B1D D6 2B 85    2014519                 Call    St_THS
2B20 1C 40        614520                 Ld      !r1,#CachHdChg
2B22 8B 0F         14521                 Jr      Ld_C_Enter
2B24               14522                 
2B24 EC 00        614523 Ld_Cach_Seek:   Ld      !rE,#0 ;start at head 0
2B26 FC 00        614524                 Ld      !rF,#0 ;and sector 0
2B28 06 ED 01    1014525                 Add     !rD,#1 ;bump the track count by 1
2B2B 16 EC 00    1014526                 Adc     !rC,#0
2B2E D6 2B 85    2014527                 Call    St_THS
2B31 1C 80        614528                 Ld      !r1,#CachSeek
2B33               14529 
2B33 42 51        614530 Ld_C_Enter:      Or     !r5,!r1 ;set seekneeded or headchange
2B35 D6 2B 4C    2014531                 Call    Ld_BlkStat
2B38               14532                 
2B38 4A 84         14533 Ld_Cache_More:  Djnz    !r4,Ld_Cache_Lp
2B3A               14534 
2B3A B0 5B        614535 Ld_Cache_End:   Clr     Cache_Index
2B3C 8D 04 5F      14536                 Jp      Bank_Ret
2B3F               14537 
2B3F               14538 
2B3F               14539 ;************************************
2B3F               14540 
2B3F               14541 
2B3F 76 E0 10    1014542 Enter_Cache:    Tm      !r0,#Spare ;check if block is a spare
2B42 6B 05         14543                 Jr      Z,Ld_Blk_BB





        WIDGET.ASSEM            Page 229
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2B44               14544                 
2B44 46 E1 01    1014545                 Or      !r1,#S_Block ;set Spare Block status
2B47 8B 03         14546                 Jr      Ld_BlkStat
2B49               14547                 
2B49 46 E1 02    1014548 Ld_Blk_BB:      Or      !r1,#B_Block ;otherwise it must be a Bad Block
2B4C               14549                 
2B4C 42 15        614550 Ld_BlkStat:     Or      !r1,!r5 ;merge in global seekneeded or headchange
2B4E 92 18       1214551                 Lde     @!!r8,!r1
2B50               14552                 
2B50 2C 17        614553 Ld_Cach_Lgcl:    Ld     !r2,#.HIBYTE. TLBlock
2B52 3C 51        614554                  Ld     !r3,#.LOWBYTE. TLBlock
2B54 D6 2B C7    2014555                 Call    Gt_Blk
2B57               14556                 
2B57 0C 1C        614557                 Ld      !r0,#Wrk_Sys+$C ;load CacheArray.Logical
2B59 93 0A       1814558                 Ldei    @!!rA,@!r0
2B5B 93 0A       1814559                 Ldei    @!!rA,@!r0
2B5D 93 0A       1814560                 Ldei    @!!rA,@!r0
2B5F               14561                 
2B5F A0 E8       1014562                 Incw    !!r8 ;set up for the next go 'round
2B61               14563                 
2B61 D6 2B 94    2014564                 Call    Gt_THS
2B64 08 EF        614565                  Ld     !r0,!rF
2B66 D6 25 3A    2014566                 Call    ReMap_Sector
2B69 F0 EE        814567                 Swap    !rE ;merge Head with sector
2B6B CF           614568                 Rcf
2B6C 90 EE        614569                 Rl      !rE
2B6E 90 EE        614570                 Rl      !rE
2B70 42 E0        614571                 Or      !rE,!r0
2B72 92 EA       1214572                 Lde     @!!rA,!rE
2B74               14573                 
2B74 A0 EA       1014574                 Incw    !!rA ;point to next cache entry
2B76               14575                 
2B76 AF          1414576                 Ret
2B77               14577                 
2B77               14578 
2B77 2C 17        614579 Cache_Cnvrt:     Ld     !r2,#.HIBYTE. PBlock
2B79 3C 4E        614580                  Ld     !r3,#.LOWBYTE. PBlock
2B7B D6 2B C7    2014581                 Call    Gt_Blk
2B7E D6 20 D4    2014582                 Call    Get_Cyl_H_S
2B81 D6 2B 85    2014583                 Call    St_THS
2B84 AF          1414584                 Ret
2B85               14585                 
2B85               14586 
2B85 2C 17        614587 St_THS:         Ld      !r2,#.HIBYTE. Cur_THS ;store the current seek address
2B87 3C 54        614588                 Ld      !r3,#.LOWBYTE. Cur_THS
2B89 0C 1C        614589                 Ld      !r0,#Wrk_Sys+$0C
2B8B 93 02       1814590                 Ldei    @!!r2,@!r0
2B8D 93 02       1814591 St_3_Ldei:      Ldei    @!!r2,@!r0
2B8F 93 02       1814592                 Ldei    @!!r2,@!r0
2B91 93 02       1814593                 Ldei    @!!r2,@!r0
2B93 AF          1414594                 Ret
2B94               14595                 
2B94 2C 17        614596 Gt_THS:         Ld      !r2,#.HIBYTE. Cur_THS ;load the current seek address
2B96 3C 54        614597                 Ld      !r3,#.LOWBYTE. Cur_THS





        WIDGET.ASSEM            Page 230
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2B98 0C 1C        614598                 Ld      !r0,#Wrk_Sys+$0C
2B9A 83 02       1814599                 Ldei    @!r0,@!!r2
2B9C 83 02       1814600 Gt_3_Ldei:      Ldei    @!r0,@!!r2
2B9E 83 02       1814601                 Ldei    @!r0,@!!r2
2BA0 83 02       1814602                 Ldei    @!r0,@!!r2
2BA2 AF          1414603                 Ret
2BA3               14604 
2BA3 0C 1C        614605 Inc_Blk:        Ld      !r0,#Wrk_Sys+$0C
2BA5 83 02       1814606                 Ldei    @!r0,@!!r2
2BA7 83 02       1814607                 Ldei    @!r0,@!!r2
2BA9 83 02       1814608                 Ldei    @!r0,@!!r2
2BAB 06 EE 01    1014609                 Add     !rE,#1
2BAE 16 ED 00    1014610                 Adc     !rD,#0
2BB1 16 EC 00    1014611                 Adc     !rC,#0
2BB4 26 E3 03    1014612                 Sub     !r3,#3 ;get back to original block ptr
2BB7 36 E2 00    1014613                 Sbc     !r2,#0
2BBA 0C 1C        614614                 Ld      !r0,#Wrk_Sys+$0C
2BBC 93 02       1814615                 Ldei    @!!r2,@!r0
2BBE 93 02       1814616                 Ldei    @!!r2,@!r0
2BC0 93 02       1814617                 Ldei    @!!r2,@!r0
2BC2 AF          1414618                 Ret
2BC3               14619                 
2BC3 0C 1C        614620 St_Blk:         Ld      !r0,#Wrk_Sys+$0C
2BC5 8B C6         14621                 Jr      St_3_Ldei
2BC7               14622 
2BC7 0C 1C        614623 Gt_Blk:         Ld      !r0,#Wrk_Sys+$0C
2BC9 8B D1         14624                 Jr      Gt_3_Ldei
2BCB               14625 
2BCB               14626                 






























        WIDGET.ASSEM            Page 231
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2BCB               14627                 .PAGE
2BCB               14628 
2BCB               14629 ;***********************************
2BCB               14630 ;
2BCB               14631 ;       Fast search of spare table
2BCB               14632 ;
2BCB               14633 ;***********************************
2BCB               14634 
2BCB 18 ED        614635 Ld_C_Srch:      Ld      !r1,!rD ;check if head ptr is NIL
2BCD 08 EC        614636                 Ld      !r0,!rC ;but first form a headptr structure
2BCF C0 E0        614637                 Rrc     !r0     ;and index into HeadPtr Array
2BD1 C0 E1        614638                 Rrc     !r1
2BD3 CF           614639                 Rcf
2BD4 C0 E1        614640                 Rrc     !r1
2BD6 2C 14        614641                 Ld      !r2,#.HIBYTE. SegPtrArray
2BD8 3C C5        614642                 Ld      !r3,#.LOWBYTE. SegPtrArray
2BDA 02 31        614643                 Add     !r3,!r1
2BDC 16 E2 00    1014644                 Adc     !r2,#0
2BDF 82 02       1214645                 Lde     !r0,@!!r2       ;get headptr and check for NIL
2BE1 76 E0 80    1014646                 Tm      !r0,#Nil
2BE4 6B 1A         14647                 Jr      Z,Ld_C_Long ;do a real search if not NIL
2BE6               14648                 
2BE6               14649                 .DO     W_10MB
2BE6 08 ED        614650                 Ld      !r0,!rD ;save for possible rollover
2BE8 02 ED        614651                 Add     !rE,!rD ;Physical Block := LBlock + LBlock DIV 256
2BEA 16 ED 00    1014652                 Adc     !rD,#0
2BED 16 EC 00    1014653                 Adc     !rC,#0
2BF0               14654                 .FIN
2BF0               14655                 
2BF0 A2 0D        614656                 Cp      !r0,!rD ;check for rollover
2BF2 6B 09         14657                 Jr      Z,Ld_C_S_End
2BF4               14658                 
2BF4 06 EE 01    1014659                 Add     !rE,#1 ;otherwise bump Physical Block
2BF7 16 ED 00    1014660                 Adc     !rD,#0
2BFA 16 EC 00    1014661                 Adc     !rC,#0
2BFD               14662                 
2BFD B2 00        614663 Ld_C_S_End:     Xor     !r0,!r0 ;return zero status
2BFF AF          1414664 Ld_C_S_Ret:     Ret
2C00               14665 
2C00 2C 14        614666 Ld_C_Long:       Ld     !r2,#.HIBYTE. SrchSpTabl
2C02 3C 7F        614667                  Ld     !r3,#.LOWBYTE. SrchSpTabl
2C04 D6 04 10    2014668                 Call    Bank_Call
2C07 8B F6         14669                 Jr      Ld_C_S_Ret
2C09               14670                  
2C09               14671                 .LSTOFF
2C09               14732                 .LSTON













        WIDGET.ASSEM            Page 232
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2C09               14733                 .Page
2C09               14734                 .FIN
2C09               14735 
2C09               14736 D_Scan:
2C09 D6 2D 5B    2014737                 Call    Scan_Clr
2C0C               14738                 
2C0C E6 0A 15    1014739                  Ld     Wrk_Io+$A,#D_Scan_Response
2C0F D6 02 8B    2014740                 Call    Ack_Read
2C12               14741                 
2C12 76 25 01    1014742 Scan:           Tm      SlfTst_Result,#No_SprTbl
2C15 6B 03         14743                 Jr      Z,Scan_1
2C17               14744                 
2C17 D6 04 80    2014745                 Call    Abort
2C1A               14746                 
2C1A 0C 00        614747 Scan_1:         Ld      !r0,#0
2C1C 1C 07        614748                 Ld      !r1,#7
2C1E 2C 19        614749                 Ld      !r2,#Wrk_Sys+$09 ;init PBlock and Track-Head-Sector
2C20 F3 20        614750 Scn_Init1:      Ld      @!r2,!r0
2C22 2E           614751                 Inc     !r2
2C23 1A FB         14752                 Djnz    !r1,Scn_Init1
2C25 D6 2D 70    2014753                 Call    St_PBlock
2C28               14754                  
2C28 E6 57 80    1014755 Scan_Lp:         Ld     Seek_Type,#Access
2C2B D6 25 50    2014756                 Call    Seek
2C2E               14757 
2C2E 2C 13        614758 Scan_Read:       Ld     !r2,#.HIBYTE. Read_Common
2C30 3C 03        614759                  Ld     !r3,#.LOWBYTE. Read_Common
2C32 D6 04 10    2014760                 Call    Bank_Call
2C35 EB 69         14761                 Jr      Nz,Scan_More
2C37               14762                 
2C37 70 E0         14763 Scan_Except:     Push   !r0 ;save error code
2C39 D6 05 E8    2014764                 Call    Ext_Push
2C3C               14765                 
2C3C 1C 00        614766 Scan_Cnvrt:     Ld      !r1,#0 ;convert to logical interleave
2C3E 2C 16        614767                 Ld      !r2,#.HIBYTE. Map_Table
2C40 3C 81        614768                 Ld      !r3,#.LOWBYTE. Map_Table
2C42 4C 13        614769                 Ld      !r4,#NbrSctrs
2C44 82 02       1214770 Scan_Map_Lp:    Lde     !r0,@!!r2
2C46 A4 55 E0    1014771                 Cp      !r0,Sector
2C49 6B 08         14772                 Jr      Z,Scan_Map_End
2C4B A0 E2       1014773                 Incw    !!r2
2C4D 1E           614774                 Inc     !r1
2C4E 4A F4         14775                 Djnz    !r4,Scan_Map_Lp
2C50               14776                 
2C50 D6 04 80    2014777                 Call    Abort
2C53               14778                 
2C53 D6 2D 7D    2014779 Scan_Map_End:   Call    Gt_PBlock
2C56 02 B1        614780                 Add     !rB,!r1 ;add in the sector offset
2C58 16 EA 00    1014781                 Adc     !rA,#0
2C5B 16 E9 00    1014782                 Adc     !r9,#0
2C5E               14783                 
2C5E 0C 00        614784                 Ld      !r0,#0
2C60 42 0B        614785                 Or      !r0,!rB
2C62 42 0A        614786                 Or      !r0,!rA





        WIDGET.ASSEM            Page 233
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2C64 42 09        614787                 Or      !r0,!r9
2C66 6B 0C         14788                 Jr      Z,Scan_Ld_L     ;block zero can not be a spare
2C68               14789 ; Convert the Physical block number to a Logical number
2C68               14790                 
2C68               14791                 .DO     W_10MB
2C68 42 BB        614792                 Or      !rB,!rB ;check for spareblock
2C6A 6B 0E         14793                 Jr      Z,Scn_Spare
2C6C 22 BA        614794                 Sub     !rB,!rA
2C6E 36 EA 00    1014795                 Sbc     !rA,#0
2C71 36 E9 00    1014796                 Sbc     !r9,#0
2C74               14797                 .FIN
2C74               14798                 
2C74   --SKIP--    14799                 .DO     W_20MB
2C74   --SKIP--    14800                 Ld      !r0,!rA ;check for spare block
2C74   --SKIP--    14801                 And     !r0,#$01
2C74   --SKIP--    14802                 Or      !r0,!rB
2C74   --SKIP--    14803                 Jr      Z,Scn_Spare
2C74   --SKIP--    14804                 Ld      !r1,!r9
2C74   --SKIP--    14805                 Ld      !r2,!rA
2C74   --SKIP--    14806                 Rcf
2C74   --SKIP--    14807                 Rrc     !r1
2C74   --SKIP--    14808                 Rrc     !r2
2C74   --SKIP--    14809                 Sub     !rB,!r2
2C74   --SKIP--    14810                 Sbc     !rA,!r1
2C74   --SKIP--    14811                 Sbc     !r9,#0
2C74               14812                 .FIN
2C74               14813                 
2C74   --SKIP--    14814                 .DO     W_40MB
2C74   --SKIP--    14815                 Ld      !r0,!rA ;check for spare block
2C74   --SKIP--    14816                 And     !r0,#$01
2C74   --SKIP--    14817                 Or      !r0,!rB
2C74   --SKIP--    14818                 Jr      Z,Scn_Spare
2C74   --SKIP--    14819                 Ld      !r1,!r9
2C74   --SKIP--    14820                 Ld      !r2,!rA
2C74   --SKIP--    14821                 Ld      !r0,#2
2C74   --SKIP--    14822 P_To_L:         Rcf
2C74   --SKIP--    14823                 Rrc     !r1
2C74   --SKIP--    14824                 Rrc     !r2
2C74   --SKIP--    14825                 Djnz    !r0,P_To_L
2C74   --SKIP--    14826                 Sub     !rB,!r2
2C74   --SKIP--    14827                 Sbc     !rA,!r1
2C74   --SKIP--    14828                 Sbc     !r9,#0
2C74               14829                 .FIN
2C74               14830                 
2C74 D6 2D 63    2014831 Scan_Ld_L:      Call    Scan_LdLB
2C77 46 E0 01    1014832                 Or      !r0,#1  ;set non-zero flag if not spare
2C7A               14833                 
2C7A 6B 21         14834 Scn_Spare:      Jr      Z,Scan_M_Pop
2C7C               14835                  
2C7C E6 58 02    1014836                  Ld     Data_Type,#User_Type
2C7F D6 2A 89    2014837                 Call    Load_Cache
2C82 D6 05 46    2014838                 Call    Load_Logical
2C85               14839                 
2C85 2C 10        614840                  Ld     !r2,#.HIBYTE. SC_Vector





        WIDGET.ASSEM            Page 234
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2C87 3C 8F        614841                  Ld     !r3,#.LOWBYTE. SC_Vector
2C89 D6 04 10    2014842                 Call    Bank_Call
2C8C               14843                 
2C8C 50 E0       1014844                 Pop     !r0 ;retrieve error code
2C8E 76 5A 01    1014845                 Tm      BlkStat,#S_Block ;check for Spare block
2C91 EB 0A         14846                 Jr      Nz,Scan_M_Pop
2C93               14847                 
2C93 2C 16        614848 Scan_Rd_Err:     Ld     !r2,#.HIBYTE. Data_Ex_Handler
2C95 3C C2        614849                  Ld     !r3,#.LOWBYTE. Data_Ex_Handler
2C97 D6 04 10    2014850                 Call    Bank_Call
2C9A               14851                 
2C9A D6 06 58    2014852                 Call    Zero_Header
2C9D               14853                 
2C9D D6 06 07    2014854 Scan_M_Pop:     Call    Ext_Pop
2CA0               14855 
2CA0 20 55        614856 Scan_More:      Inc     Sector     ;read next sector
2CA2 A6 55 13    1014857                 Cp      Sector,#NbrSctrs ;check for over flow
2CA5 1B 87         14858                 Jr      Lt,Scan_Read
2CA7               14859                 
2CA7 D6 2D 7D    2014860                 Call    Gt_PBlock
2CAA 06 EB 13    1014861                 Add     !rB,#NbrSctrs ;go to next set of blocks
2CAD 16 EA 00    1014862                 Adc     !rA,#0
2CB0 16 E9 00    1014863                 Adc     !r9,#0
2CB3 D6 2D 70    2014864                 Call    St_PBlock
2CB6               14865                 
2CB6 E6 55 00    1014866                 Ld      Sector,#0 ;otherwise start at sector 0
2CB9 20 54        614867                 Inc     Head    ;and go to next head
2CBB A6 54 02    1014868                 Cp      Head,#NbrHds
2CBE 9B 08         14869                 Jr      Ge,Scan_IncTrks
2CC0               14870                 
2CC0 E8 54        614871                  Ld     !rE,Head
2CC2 D6 26 62    2014872                 Call    SelectHead
2CC5 8D 2C 2E      14873                 Jp      Scan_Read
2CC8               14874                 
2CC8 EC 00        614875 Scan_IncTrks:   Ld      !rE,#0 ;otherwise seek to next track
2CCA FC 00        614876                 Ld      !rF,#0
2CCC D8 53        614877                 Ld      !rD,Cylinder+1
2CCE C8 52        614878                 Ld      !rC,Cylinder
2CD0 06 ED 01    1014879                 Add     !rD,#1
2CD3 16 EC 00    1014880                 Adc     !rC,#0
2CD6 0C 02        614881                 Ld      !r0,#.HIBYTE. ( NbrTracks-1 ) ;check for last track
2CD8 1C 01        614882                 Ld      !r1,#.LOWBYTE. ( NbrTracks-1 )
2CDA B2 1D        614883                 Xor     !r1,!rD
2CDC B2 0C        614884                 Xor     !r0,!rC
2CDE 42 01        614885                 Or      !r0,!r1
2CE0 ED 2C 28      14886                 Jp      Nz,Scan_Lp
2CE3               14887 
2CE3 4C 00        614888 Scan_End:       Ld      !r4,#0 ;start searching for bad blocks
2CE5 2C 14        614889 Scn_BadLp:      Ld      !r2,#.HIBYTE. SegPtrArray
2CE7 3C C5        614890                 Ld      !r3,#.LOWBYTE. SegPtrArray
2CE9 02 34        614891                 Add     !r3,!r4 ;get index to HeadPtr
2CEB 16 E2 00    1014892 Scn_Bd3:        Adc     !r2,#0
2CEE 82 02       1214893                 Lde     !r0,@!!r2 ;get HeadPtr
2CF0 76 E0 80    1014894                 Tm      !r0,#Nil  ;check for any elements here





        WIDGET.ASSEM            Page 235
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2CF3 EB 57         14895                 Jr      Nz,Scn_BdNext
2CF5               14896                 
2CF5 56 E0 7F    1014897 Scn_Bd1:        And     !r0,#$7F ;mask off NIL bit
2CF8 2C 18        614898                  Ld     !r2,#.HIBYTE. Get_Ptr
2CFA 3C 09        614899                  Ld     !r3,#.LOWBYTE. Get_Ptr
2CFC D6 04 10    2014900                 Call    Bank_Call
2CFF 82 02       1214901                 Lde     !r0,@!!r2 ;get status of element
2D01               14902                 
2D01 76 E0 02    1014903                 Tm      !r0,#User_Type ;check only user data
2D04 6B 3C         14904                 Jr      Z,Scn_Bd2
2D06 76 E0 10    1014905                 Tm      !r0,#Spare ;look at only badblocks
2D09 EB 37         14906                 Jr      Nz,Scn_Bd2
2D0B               14907                 
2D0B D6 05 E8    2014908                 Call    Ext_Push ;get logical block
2D0E               14909                 
2D0E 9C 00        614910                 Ld      !r9,#0
2D10 90 E4        614911                 Rl      !r4
2D12 10 E4        614912                 Rlc     !r4
2D14 10 E9        614913                 Rlc     !r9
2D16 A0 E2       1014914                 Incw    !!r2
2D18 82 A2       1214915                 Lde     !rA,@!!r2
2D1A 42 A4        614916                 Or      !rA,!r4
2D1C A0 E2       1014917                 Incw    !!r2
2D1E 82 B2       1214918                 Lde     !rB,@!!r2
2D20 D6 2D 63    2014919                 Call    Scan_LdLB
2D23               14920                  
2D23 D6 05 46    2014921                 Call    Load_Logical
2D26 2C 16        614922                  Ld     !r2,#.HIBYTE. CnvrtLogical
2D28 3C 4B        614923                  Ld     !r3,#.LOWBYTE. CnvrtLogical
2D2A D6 04 10    2014924                 Call    Bank_Call
2D2D D6 25 50    2014925                 Call    Seek
2D30               14926                 
2D30 0C 84        614927                  Ld     !r0,#Error+Ex_BadBlock
2D32 E6 58 02    1014928                  Ld     Data_Type,#User_Type
2D35 E6 5A 02    1014929                  Ld     BlkStat,#B_Block
2D38 2C 16        614930                  Ld     !r2,#.HIBYTE. Data_Ex_Handler
2D3A 3C C2        614931                  Ld     !r3,#.LOWBYTE. Data_Ex_Handler
2D3C D6 04 10    2014932                 Call    Bank_Call
2D3F               14933                 
2D3F D6 06 07    2014934                 Call    Ext_Pop
2D42               14935                 
2D42 76 E0 80    1014936 Scn_Bd2:        Tm      !r0,#Nil ;check for end of chain
2D45 EB 05         14937                 Jr      Nz,Scn_BdNext
2D47 06 E3 03    1014938                 Add     !r3,#3 ;get ptr to next
2D4A 8B 9F         14939                 Jr      Scn_Bd3
2D4C               14940 
2D4C 4E           614941 Scn_BdNext:     Inc     !r4 ;go to next HeadPtr
2D4D               14942                 
2D4D               14943                 .DO     W_10MB
2D4D A6 E4 20    1014944                 Cp      !r4,#$20 ;only 32 HeadPtrs for 10MB
2D50               14945                 .FIN
2D50   --SKIP--    14946                 .DO     W_20MB
2D50   --SKIP--    14947                 Cp      !r4,#$40 ;64 HeadPtrs for 20MB
2D50               14948                 .FIN





        WIDGET.ASSEM            Page 236
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2D50   --SKIP--    14949                 .DO     W_40MB
2D50   --SKIP--    14950                 Cp      !r4,#$80 ;128 HeadPtrs for 40MB
2D50               14951                 .FIN
2D50               14952                 
2D50 EB 93         14953                 Jr      Nz,Scn_BadLp
2D52               14954                 
2D52 D6 28 D0    2014955                 Call    Park_Heads
2D55 D6 2D 5B    2014956                 Call    Scan_Clr
2D58 8D 04 5F      14957                 Jp      Bank_Ret
2D5B               14958                 

















































        WIDGET.ASSEM            Page 237
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2D5B               14959                 .Page
2D5B               14960 ;****************************
2D5B               14961 
2D5B 2C 1E        614962 Scan_Clr:        Ld     !r2,#.HIBYTE. ClrNormStat
2D5D 3C 6C        614963                  Ld     !r3,#.LOWBYTE. ClrNormStat
2D5F D6 04 10    2014964                 Call    Bank_Call
2D62 AF          1414965                 Ret
2D63               14966                 
2D63 2C 14        614967 Scan_LdLB:      Ld      !r2,#.HIBYTE. LogicalBlock
2D65 3C A1        614968                 Ld      !r3,#.LOWBYTE. LogicalBlock
2D67 1C 04        614969                 Ld      !r1,#4
2D69 0C 19        614970                 Ld      !r0,#Wrk_Sys+$09
2D6B 93 02       1814971 Scan_LB_Lp:     Ldei    @!!r2,@!r0
2D6D 1A FC         14972                 Djnz    !r1,Scan_LB_Lp
2D6F AF          1414973                 Ret
2D70               14974                 
2D70 2C 17        614975 St_PBlock:      Ld      !r2,#.HIBYTE. PBlk
2D72 3C 58        614976                 Ld      !r3,#.LOWBYTE. PBlk
2D74 0C 19        614977                 Ld      !r0,#Wrk_Sys+$09
2D76 93 02       1814978                 Ldei    @!!r2,@!r0
2D78 93 02       1814979                 Ldei    @!!r2,@!r0
2D7A 93 02       1814980                 Ldei    @!!r2,@!r0
2D7C AF          1414981                 Ret
2D7D               14982                 
2D7D 2C 17        614983 Gt_PBlock:      Ld      !r2,#.HIBYTE. PBlk
2D7F 3C 58        614984                 Ld      !r3,#.LOWBYTE. PBlk
2D81 0C 19        614985                 Ld      !r0,#Wrk_Sys+$09
2D83 83 02       1814986                 Ldei    @!r0,@!!r2
2D85 83 02       1814987                 Ldei    @!r0,@!!r2
2D87 83 02       1814988                 Ldei    @!r0,@!!r2
2D89 AF          1414989                 Ret
2D8A               14990                 
2D8A               14991                 .LSTOFF
2D8A               15030                 .LSTON

























        WIDGET.ASSEM            Page 238
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2D8A               15031                 .Page
2D8A               15032                 .FIN
2D8A               15033                 
2D8A               15034 Strt_FreeProcess:
2D8A 8F           615035                 Di
2D8B 31 10        615036                 Srp     #Wrk_Sys ;get into a reasonable state
2D8D B0 FE        615037                 Clr     Sph
2D8F E6 FF 80    1015038                 Ld      Spl,#Stack_Top
2D92               15039                 
2D92 76 2A F8    1015040                 Tm      SeekCount,#$F8 ;do arm sweep every 2k seeks or so
2D95 6B 20         15041                 Jr      Z,Chk_Park
2D97               15042                 
2D97 B0 2A        615043                 Clr     SeekCount
2D99 B0 2B        615044                 Clr     SeekCount+1
2D9B               15045                 
2D9B CC 01        615046                  Ld     !rC,#Init_HiCyl ;seek to data recal loaction
2D9D DC F9        615047                  Ld     !rD,#Init_LoCyl
2D9F EC 00        615048                  Ld     !rE,#0 ;head zero
2DA1 FC 00        615049                  Ld     !rF,#0 ;sector zero
2DA3 D6 05 10    2015050                 Call    New_Seek
2DA6               15051                 
2DA6 CC 00        615052                  Ld     !rC,#0
2DA8 DC 40        615053                  Ld     !rD,#64
2DAA EC 00        615054                  Ld     !rE,#0
2DAC FC 00        615055                  Ld     !rF,#0
2DAE D6 05 10    2015056                 Call    New_Seek
2DB1               15057                 
2DB1 56 56 7F    1015058                 And     DiskStat,#$FF-On_Track
2DB4 D6 29 56    2015059                 Call    Set_SeekNeeded
2DB7               15060                 
2DB7 76 56 10    1015061 Chk_Park:       Tm      DiskStat,#Parked
2DBA EB 06         15062                 Jr      Nz,FreeP_NoPark
2DBC               15063                 
2DBC D6 28 D0    2015064                 Call    Park_Heads
2DBF 8D 2E 39*07   15065                 Jp      Chk_Pk_Jp
2DC2               15066                 
2DC2 76 23 01    1015067 FreeP_NoPark:   Tm      Free_SlfTst,#$01 ;check for even value
2DC5 6B 05         15068                 Jr      Z,FreeP_SlfTst   ;to do tests only every other time
2DC7 20 23        615069                 Inc     Free_SlfTst ;otherwise make even for next time
2DC9 8D 2E 39*11   15070                 Jp      Chk_Pk_Jp
2DCC               15071                 
2DCC 2C 2D        615072 FreeP_SlfTst:   Ld      !r2,#.HIBYTE. SlfTst_Table
2DCE 3C E0        615073                 Ld      !r3,#.LOWBYTE. SlfTst_Table
2DD0 04 23 E3    1015074                 Add     !r3,Free_SlfTst
2DD3 16 E2 00    1015075                 Adc     !r2,#0
2DD6 20 23        615076                 Inc     Free_SlfTst ;make value odd
2DD8 C2 E2       1215077                 Ldc     !rE,@!!r2
2DDA A0 E2       1015078                 Incw    !!r2
2DDC C2 F2       1215079                 Ldc     !rF,@!!r2
2DDE 30 EE        815080                 Jp      @!rE
2DE0               15081                 
2DE0 2D F2         15082 SlfTst_Table:   .DW     Free_Ram
2DE2 2E 39         15083                 .DW     Chk_Pk_Jp       ;"
2DE4 2E 00         15084                 .DW     Free_Eprom





        WIDGET.ASSEM            Page 239
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2DE6 2E 39         15085                 .DW     Chk_Pk_Jp       ;"
2DE8 2E 1A         15086                 .DW     Free_MtrSpd
2DEA 2E 39         15087                 .DW     Chk_Pk_Jp       ;"
2DEC 2E 0C         15088                 .DW     Free_SctrCnt
2DEE 2E 39         15089                 .DW     Chk_Pk_Jp       ;"
2DF0 2E 28         15090                 .DW     Free_Rw
2DF2               15091                 
2DF2 2C 23        615092 Free_Ram:        Ld     !r2,#.HIBYTE. Chk_SprChk
2DF4 3C 50        615093                  Ld     !r3,#.LOWBYTE. Chk_SprChk
2DF6 D6 04 10    2015094                 Call    Bank_Call
2DF9 EB 3E         15095                 Jr      Nz,Chk_Pk_Jp
2DFB               15096                 
2DFB 46 25 80    1015097                 Or      SlfTst_Result,#Ram_Fail
2DFE EB 39         15098                 Jr      Nz,Chk_Pk_Jp
2E00               15099                 
2E00 0C 02        615100 Free_Eprom:      Ld     !r0,#Eprom2
2E02 D6 01 8C    2015101                 Call    EpromTest
2E05 6B 32         15102                 Jr      Z,Chk_Pk_Jp
2E07               15103                 
2E07 46 25 40    1015104                 Or      SlfTst_Result,#Eprom_Fail
2E0A 8B 2D         15105                 Jr      Chk_Pk_Jp
2E0C               15106                 
2E0C 2C 2A        615107 Free_SctrCnt:    Ld     !r2,#.HIBYTE. SctrCount
2E0E 3C 10        615108                  Ld     !r3,#.LOWBYTE. SctrCount
2E10 D6 04 10    2015109                 Call    Bank_Call
2E13 6B 24         15110                 Jr      Z,Chk_Pk_Jp
2E15               15111                 
2E15 46 25 08    1015112                 Or      SlfTst_Result,#Sector_Cnt
2E18 8B 1F         15113                 Jr      Chk_Pk_Jp
2E1A               15114                 
2E1A 2C 29        615115 Free_MtrSpd:     Ld     !r2,#.HIBYTE. MtrSpd
2E1C 3C B5        615116                  Ld     !r3,#.LOWBYTE. MtrSpd
2E1E D6 04 10    2015117                 Call    Bank_Call
2E21 6B 16         15118                 Jr      Z,Chk_Pk_Jp
2E23               15119                 
2E23 46 25 20    1015120                 Or      SlfTst_Result,#Disk_Speed
2E26 8B 11         15121                 Jr      Chk_Pk_Jp
2E28               15122                 
2E28 46 25 02    1015123 Free_Rw:        Or      SlfTst_Result,#Rw_Fail ;assume failure
2E2B 2C 2A        615124                  Ld     !r2,#.HIBYTE. RwTest1
2E2D 3C 3D        615125                  Ld     !r3,#.LOWBYTE. RwTest1
2E2F D6 04 10    2015126                 Call    Bank_Call
2E32 6B 05         15127                 Jr      Z,Chk_Pk_Jp
2E34               15128                 
2E34 56 25 FD    1015129                 And     SlfTst_Result,#$FF-Rw_Fail
2E37               15130                  
2E37 B0 23        615131                 Clr     Free_SlfTst
2E39 8D 03 A1      15132 Chk_Pk_Jp:      Jp      FreeP_Leave
2E3C               15133 
2E3C               15134                 .LSTOFF
2E3C               15258                 .LSTON








        WIDGET.ASSEM            Page 240
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2E3C               15259                 .Page
2E3C               15260                 .FIN
2E3C               15261 
2E3C 10 BF         15262 K1              .Equ    4287
2E3C 00 00         15263 R2Mask          .Equ    0
2E3C 00 0F         15264 R3Mask          .Equ    $0F
2E3C 00 80         15265 Ecc_Correctable .Equ    $80
2E3C 00 40         15266 Ecc_Aligned     .Equ    $40
2E3C 00 20         15267 Ecc_Done        .Equ    $20
2E3C               15268 
2E3C               15269 Ecc:
2E3C B0 E7        615270                 Clr     !r7     ;clear booleans
2E3E 8C 10        615271                 Ld      !r8,#.HIBYTE. K1
2E40 9C BF        615272                 Ld      !r9,#.LOWBYTE. K1
2E42               15273                 
2E42 0C 00        615274                 Ld      !r0,#0 ;get ready to check for all zero symdrome
2E44 BC 06        615275                 Ld      !rB,#6  ;load six bytes ;R1..R6 := Syndrome Bytes
2E46 CC 12        615276                 Ld      !rC,#.HIBYTE. RBuf1Ecc
2E48 DC 2F        615277                 Ld      !rD,#.LOWBYTE. RBUf1Ecc
2E4A AC 11        615278                 Ld      !rA,#Wrk_Sys+$01 ;load syndrome bytes into registers
2E4C               15279                 
2E4C 83 AC       1815280 Ecc_Ld_Lp:      Ldei    @!rA,@!!rC
2E4E 43 0A        615281                 Or      !r0,@!rA
2E50 BA FA         15282                 Djnz    !rB,Ecc_Ld_Lp
2E52 6D 2E E1      15283                 Jp      Z,Ecc_End
2E55               15284                 
2E55 42 11        615285 Ecc_LHJ_While:  Or      !r1,!r1 ;WHILE ( R1 = 0 ) DO
2E57 EB 14         15286                 Jr      Nz,Ecc_Algn
2E59               15287                 
2E59 18 E2        615288                 Ld      !r1,!r2 ;shift left 1 byte
2E5B 28 E3        615289                 Ld      !r2,!r3
2E5D 38 E4        615290                 Ld      !r3,!r4
2E5F 48 E5        615291                 Ld      !r4,!r5
2E61 58 E6        615292                 Ld      !r5,!r6
2E63 B0 E6        615293                 Clr     !r6
2E65 06 E9 08    1015294                 Add     !r9,#8  ;J := J + 8
2E68 16 E8 00    1015295                 Adc     !r8,#0
2E6B 8B E8         15296                 Jr      Ecc_LHJ_While
2E6D               15297                 
2E6D D6 2E E4    2015298 Ecc_Algn:       Call    ShiftAndXor
2E70 EB 15         15299                 Jr      Nz,Ecc_Al_1
2E72               15300                 
2E72 08 E4        615301                 Ld      !r0,!r4 ;IF ( R4=R5=R6=0 )
2E74 42 05        615302                 Or      !r0,!r5
2E76 42 06        615303                 Or      !r0,!r6
2E78 F8 E3        615304                 Ld      !rF,!r3 ;AND ( R3*R3Mask = 0 )
2E7A 56 EF 0F    1015305                 And     !rF,#R3Mask
2E7D 42 0F        615306                 Or      !r0,!rF
2E7F EB 06         15307                 Jr      Nz,Ecc_Al_1
2E81               15308                 
2E81 46 E7 40    1015309                 Or      !r7,#Ecc_Aligned
2E84 D6 2F 05    2015310                 Call    TestMod8
2E87               15311                 
2E87 76 E7 40    1015312 Ecc_Al_1:       Tm      !r7,#Ecc_Aligned





        WIDGET.ASSEM            Page 241
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2E8A EB 03         15313                 Jr      Nz,Ecc_Al_2
2E8C               15314                 
2E8C D6 2F 10    2015315                 Call    Test0
2E8F               15316                 
2E8F 76 E7 20    1015317 Ecc_Al_2:       Tm      !r7,#Ecc_Done
2E92 EB 1D         15318                 Jr      Nz,Ecc_Crct
2E94               15319                 
2E94 80 E8       1015320                 Decw    !!r8 ; J := J - 1
2E96               15321                 
2E96 76 E7 60    1015322                 Tm      !r7,#Ecc_Done+Ecc_Aligned
2E99 6B D2         15323                 Jr      Z,Ecc_Algn
2E9B               15324 
2E9B D6 2E E4    2015325 Ecc_Shift:      Call    ShiftAndXor
2E9E EB 05         15326                 Jr      Nz,Ecc_Shft_Else
2EA0               15327                 
2EA0 D6 2F 05    2015328                 Call    TestMod8
2EA3 8B 03         15329                 Jr      Ecc_Shft_2
2EA5               15330                 
2EA5 D6 2F 10    2015331 Ecc_Shft_Else:  Call    Test0
2EA8               15332 
2EA8 76 E7 20    1015333 Ecc_Shft_2:     Tm      !r7,#Ecc_Done
2EAB EB 04         15334                 Jr      Nz,Ecc_Crct
2EAD               15335                 
2EAD 80 E8       1015336                 Decw    !!r8 ; J := J - 1
2EAF 8B EA         15337                 Jr      Ecc_Shift
2EB1               15338 
2EB1 76 E7 80    1015339 Ecc_Crct:       Tm      !r7,#Ecc_Correctable
2EB4 6B 2B         15340                 Jr      Z,Ecc_End
2EB6               15341                 
2EB6 AC 03        615342                 Ld      !rA,#3  ; J := J DIV 8
2EB8 C0 E8        615343 Ecc_Div8:       Rrc     !r8
2EBA C0 E9        615344                 Rrc     !r9
2EBC AA FA         15345                 Djnz    !rA,Ecc_Div8
2EBE 56 E8 1F    1015346                 And     !r8,#$1F        ;mask off any unwanted carries
2EC1               15347                 
2EC1 CC 10        615348                 Ld      !rC,#.HIBYTE. RDummy
2EC3 DC 18        615349                 Ld      !rD,#.LOWBYTE. RDummy
2EC5 02 D9        615350                 Add     !rD,!r9
2EC7 12 C8        615351                 Adc     !rC,!r8
2EC9               15352                 
2EC9 BC 12        615353                 Ld      !rB,#Wrk_Sys+$02 ;start with R2
2ECB AC 03        615354                 Ld      !rA,#3  ;correct 3 bytes
2ECD               15355                 
2ECD 82 1C       1215356 Ecc_Crct_Lp:    Lde     !r1,@!!rC
2ECF B3 1B        615357                 Xor     !r1,@!rB
2ED1 F3 B1        615358                 Ld      @!rB,!r1
2ED3 93 BC       1815359                 Ldei    @!!rC,@!rB
2ED5 AA F6         15360                 Djnz    !rA,Ecc_Crct_Lp
2ED7               15361                 
2ED7 2C 20        615362                  Ld     !r2,#.HIBYTE. RBuf_To_Buf2
2ED9 3C 99        615363                  Ld     !r3,#.LOWBYTE. RBuf_To_Buf2
2EDB D6 04 10    2015364                 Call    Bank_Call
2EDE 76 E7 80    1015365                 Tm      !r7,#Ecc_Correctable ;set correctable flag
2EE1               15366                 





        WIDGET.ASSEM            Page 242
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2EE1 8D 04 5F      15367 Ecc_End:        Jp      Bank_Ret
2EE4               15368                 
2EE4               15369                 .LSTOFF
2EE4               15416                 .LSTON























































        WIDGET.ASSEM            Page 243
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2EE4               15417                 .Page
2EE4               15418                 .FIN
2EE4               15419 
2EE4               15420 ShiftAndXor:
2EE4 CC 06        615421                 Ld      !rC,#6  ;shift 6 bytes
2EE6 DC 11        615422                 Ld      !rD,#Wrk_Sys+$01 ;start with R1
2EE8               15423                 
2EE8 CF           615424                 Rcf
2EE9               15425 
2EE9 C1 ED        615426 S_A_Xor_Lp:     Rrc     @!rD
2EEB DE           615427                 Inc     !rD
2EEC CA FB         15428                 Djnz    !rC,S_A_Xor_Lp
2EEE               15429                 
2EEE FB 12         15430                 Jr      Nc,S_A_Xor_End
2EF0               15431                 
2EF0 B6 E1 8C    1015432                 Xor     !r1,#140
2EF3 B6 E2 0C    1015433                 Xor     !r2,#12
2EF6 B6 E3 0A    1015434                 Xor     !r3,#10
2EF9 B6 E4 28    1015435                 Xor     !r4,#40
2EFC B6 E5 18    1015436                 Xor     !r5,#24
2EFF B6 E6 08    1015437                 Xor     !r6,#8
2F02               15438                 
2F02 42 11        615439 S_A_Xor_End:    Or      !r1,!r1  ;IF ( R1=0 )...
2F04 AF          1415440                 Ret
2F05               15441 
2F05               15442                 .LSTOFF
2F05               15474                 .LSTON
































        WIDGET.ASSEM            Page 244
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2F05               15475                 .Page
2F05               15476                 .FIN
2F05               15477 
2F05               15478 TestMod8:
2F05 08 E9        615479                 Ld      !r0,!r9
2F07 56 E0 07    1015480                 And     !r0,#07 ;get remainder from division
2F0A EB 03         15481                 Jr      Nz,TstMd8_Done
2F0C               15482                 
2F0C 46 E7 A0    1015483                 Or      !r7,#Ecc_Done+Ecc_Correctable
2F0F               15484                 
2F0F AF          1415485 TstMd8_Done:    Ret
2F10               15486 
2F10               15487                 .LSTOFF
2F10               15520                 .LSTON













































        WIDGET.ASSEM            Page 245
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2F10               15521                 .Page
2F10               15522                 .FIN
2F10               15523 
2F10               15524 Test0:
2F10 08 E8        615525                 Ld      !r0,!r8
2F12 42 09        615526                 Or      !r0,!r9 ;IF ( J = 0 )..
2F14 EB 06         15527                 Jr      Nz,Tst0_Done
2F16               15528                 
2F16 46 E7 20    1015529                 Or      !r7,#Ecc_Done
2F19 56 E7 7F    1015530                 And     !r7,#$FF-Ecc_Correctable
2F1C               15531                 
2F1C AF          1415532 Tst0_Done:      Ret
2F1D               15533 
2F1D               15534                 .LSTOFF
2F1D               15541                 .LSTON












































        WIDGET.ASSEM            Page 246
Widget-10: AB_Code: Rev:1-A.1.4 May 31,1984


2F1D               15542                 .Page
2F1D               15543                 .FIN
2F1D               15544                 
2F1D               15545                 .ORG    $3000 ;move this code into the eprom, bank 1
3000               15546                 
3000 00 00         15547                 .BLOCK  0,2   ;reserve two bytes for the checkbyte
3002 02            15548                 .DB     2     ;bank 1
3003 F0 78 3C 1E   15549                 .DB     $F0, $78, $3C, $1E
3007               15550                 .LSTOFF
















































