KA410ROM23.BIN /abs /out=KA410ROM23W.BIN /jou=KA410ROM23W !------------------------------------------------------------------------------- ! "KA410-B V2.3" ROM: ! - replace "MUA0" TVBTDRIVER by "DKAn" DK2KBTDRIVER ! - fix bogus 000000C4 SCSI (disk) self-test error ! - add "T 56" for checking/setting the SCSI host id (default = 0) ! - try to improve SCSI arbitration logic during self-test (03C6) ! (no errors observed yet). ! !------------------------------------------------------------------------------- ! w.j.m. 24-mar-1999 (based upon 2KBTDRIVER.MAR with CDROM = 1) ! mod 29-mar-1999 wjm: (after Vs3100 "STRG V1.3") ! fix "000000C4" SCSI self-test problem, ! caused by not expecting interrupt due to ATN; ! also remove "000000C6" test. ! mod 02-apr-1999 wjm: 2KBTDRIVER.MAR updated to support `IO410$AB_SCSI'; ! change rom-id from "KA410-B W" to KA410-W V" ! mod 04-apr-1999 wjm: add "T 56"; try to fix arbitration logic (03C6 error). !------------------------------------------------------------------------------- ! def IO410$AL_SIDEX = 20040004 def IO410$AB_CPMBX = 200B0038 ! NVRAM, HALT flags def IO410$AB_SCSI = 200B00BC ! NVRAM, SCSI host id (name made up) def IO410$AB_SCTLS = 200C0080 ! def ka410rom = IO410$AL_SIDEX - 4 ! more physical addresses ... def ka410rom_end = ka410rom + 040000 def ka410rom_cksum = ka410rom_end - 4 ! !------------------------------------------------------------------------------- ! ! NOTE: As of 02-apr-1999, this patch affects both the ROM VMB, ! and the self-test code, so both ids are changed. ! Use ">>> T 80000050" in order to inspect the VMB version. ! def vmb_version = 2005376C - ka410rom ! replace/ascii/long vmb_version 'V1.2' exit 'W1.2' exit ! def rom_version_410 = 200414B0 - ka410rom ! replace/ascii/long rom_version_410 'KA41' '0-B ' 'V2.x' exit 'KA41' '0-W ' ! ... here 'V2.x' exit ! !------------------------------------------------------------------------------- !----- part 1a: fix SCSI self-test (000000C4) ! def t6_unit_c4_loop = 20044D4F - ka410rom def t6_unit_c6_start = 20044D82 - ka410rom def t6_unit_c6_end = 20044D92 - ka410rom def t6_unit_finish = 20044E1F - ka410rom ! exit tests here def delay_316 = 2004C7AF - ka410rom ! just a random subroutine ! verify/inst t6_unit_c4_loop ! wait for interrupt after DMA MSG_IN ' MOVL B^014(R7),R2' ! get mask set by interrupt handler ' BITL #00000050,R2' ! expect <6> and/or <4> ' BNEQ _4D7A' ! if so, done with "C4" test ' BBCCI #0,B^014(R7),_4D64' ! if some other interrupt occurred, ' TSTB B^01C(R6)' ! touch _RESET to acknowledge it '_4D64: JSB L^delay_316' ' AOBLEQ #000007D0,R1,t6_unit_c4_loop' ' MOVB #0C4,B^8(R7)' ! set ttssmmC4 status ' BRW t6_unit_finish' '_4D7A: BBCCI #0,B^014(R7),_4D82' ! if an interrupt occurred ' TSTB B^01C(R6)' ! touch _RESET to acknowledge it '_4D82: MOVL B^014(R7),R2' ! get mask again ' BBS #4,R2,t6_unit_c6_end' ! if <4>(inteop), done with "C6" test ' MOVB #0C6,B^8(R7)' ! set ttssmmC6 status ' BRW t6_unit_finish' exit ! replace/inst t6_unit_c4_loop + 4 ' BITL #00000050,R2' ! expect <4>(inteop) and <6>(phase chg) exit ' BITL #000000D0,R2' ! also expect <7>(ATN) exit ! replace/inst t6_unit_c6_start ! <4> is typically missing ... ' MOVL B^014(R7),R2' ' BBS #4,R2,t6_unit_c6_end' ' MOVB #0C6,B^8(R7)' ' BRW t6_unit_finish' exit ' nop' ! ... so remove this test (cf. Vs3100) exit ! !------------------------------------------------------------------------------- !----- part 1b: try to fix SCSI self-test arbitration (03C6) ! def t6_select_3c6 = 20045293 - ka410rom def t6_select_3c6_end = 200452A3 - ka410rom def t6_select_exit = 2004531D - ka410rom ! verify/inst t6_select_3c6 ' movb (r6),r2' ! get _CUR_DATA ' cmpb r4,r2' ! compare 1@hostid to bus data ' bleq t6_select_3c6_end' !* signed test here is definitely wrong ' movzwl #03C6,r0' ! ... return(03C6) ' brw t6_select_exit' ! (can't retry forever w/i self-test) exit ! replace/inst ' bleq t6_select_3c6_end' ! fail with (signed) lower id contender, exit ! 7<0<1<2<3<4<5<6 ' bgequ t6_select_3c6_end' ! fail with *higher* id contender, exit ! 0<1<2<3<4<5<6<7 ! !------------------------------------------------------------------------------- !----- part 2: add "T 56" utility for setting SCSI host id ! ! unused space in KA410-B V2.3 ROM: ! vmb410_end ... PRA0_bootblock approx. 320 bytes ! space after "B PRA0" image approx. 37 kBytes ! def PRA0_bootblock = 20059C00 - ka410rom verify/long PRA0_bootblock ! plausibility check only +0E7000018 exit ! examine ! # blocks loaded by "B PRA0" def pra0_boot_blocks = \ def free_area = pra0_bootblock + 0200 + <0200 * pra0_boot_blocks> def free_size = - free_area ! size of "patch area" ! !--- ! ! a few random subroutines ... def cons_output_r0r1 = 20047764 - ka410rom ! r0 = length, r1 = address def cons_output7b_r2 = 2004777D - ka410rom ! output any 7 bit byte in R2 def cons_input_num = 2004132E - ka410rom ! [(r0=0) => input a number] ! def phy_test_50_54 = 20048EC0 ! T 5% get here def test_50_54 = phy_test_50_54 - ka410rom def test_53 = 200490FD - ka410rom ! T 53: prompt for HALT flags ! def selftest_array = 20045739 - 8 - ka410rom def selftest_array_NVR = selftest_array + <2 * 080> verify/long/asc 'NVR ' ' ' exit ! test_50_54 is reached via a pointer within this area, cf. below. ! verify/inst test_50_54 ' CLRB W^009F(R11)' ' CASEL R0,#0050,#4' ! 1$: .WORD LB_20048EDD - 1$ ! test 50 or 80000050 (status display) ! .WORD LB_20049026 - 1$ ! test 51 (q boot device) ! .WORD LB_20049098 - 1$ ! test 52 (q boot flags) ! .WORD LB_200490FD - 1$ ! test 53 (q halt flags) ! .WORD LB_2004914F - 1$ ! test 54 (q language) ! LB_20048ED6: ! MOVZBL #0017,R0 ! "?ILL CMD" message code ! BSBW S_20047731 ! output a message ! RSB exit ! ! we'll model "T 56" after this one ... verify/inst test_53 ' pushr #01E' ! save R1..R4 ' movab b^<20049093 + 1 - ka410rom>,r1' ! -> 4 spaces ' movzbl b^<20049093 - ka410rom>,r0' ! R0 := 4 ' bsbw cons_output_r0r1' ' movw @#IO410$AB_CPMBX,-(sp)' ' extzv #6,#2,(sp),r0' ! R0 := old value ' addl2 #030,r0' ! same in ASCII ' movl r0,r2' ' bsbw cons_output7b_r2' ' clrl r0' ' bsbw cons_input_num' ! [input a number] ' tstl r0' ' bneq t53_30$' ! [got one] ' tstl r1' ' beql t53_50$' ! [confirmed old value] ' brb t53_80$' ! [input error] 't53_30$: movl (r1),r1' ! R1 := {input value} ' clrl r0' ! assume out-of-range error ' cmpl r1,#3' ! check range (0..3) ' bgtru t53_80$' ! br if no good ' insv r1,#6,#2,(sp)' ! ok, update stack copy ' insv r1,#2,#2,(sp)' 't53_50$: movl #1,r0' ! success status 't53_80$: movw (sp)+,@#IO410$AB_CPMBX' ! re-store stack copy ' popr #001E' ! restore R1..R4 ' rsb' exit ! !--- NEW data & code for "T 56" ! def t56_asciz = free_area deposit/word/asc 'SC' 'SI' 'A:' ' ' exit ex/word def free_area = . ! start of "patch area" def free_size = - free_area ! size of "patch area" ! deposit/byte t56_asciz ! fill in string length +> exit ! def test_56 = free_area deposit/inst test_56 ! (after TEST 53 code, above) ' clrb w^009F(r11)' ! [from test_50_54] ' pushr #01E' ! save R1..R4 ' movab b^,r1' ! R1 -> "SCSIA: " ' movzbl b^t56_asciz,r0' ! R0 := string length ' jsb l^cons_output_r0r1' ' movw @#IO410$AB_SCSI,-(sp)' ! fetch NVRAM byte (left shifted by 2) ' extzv #2,#3,(sp),r0' ! R0 := old hostid ' addl2 #030,r0' ! convert to ASCII ' movl r0,r2' ' jsb cons_output7b_r2' ' clrl r0' ' jsb cons_input_num' ! [input a number] ' tstl r0' ' bneq t56_30$' ! [got one] ' tstl r1' ' beql t56_50$' ! [confirmed old value] ' brb t56_80$' ! [input error] 't56_30$: movl (r1),r1' ! R1 := {input value} ' clrl r0' ! assume out-of-range error ' cmpl r1,#7' ! check range (0..7) ' bgtru t56_80$' ! br if no good ' insv r1,#2,#3,(sp)' ! ok, update stack copy 't56_50$: movl #1,r0' ! success status 't56_80$: movw (sp)+,@#IO410$AB_SCSI' ! re-store stack copy ' popr #001E' ! restore R1..R4 ' rsb' exit ex/inst def free_area = . ! start of "patch area" def free_size = - free_area ! size of "patch area" ! !--- dispatch to test_56 ! def t5x_dispatch = free_area def phy_t5x_dispatch = t5x_dispatch + ka410rom deposit/inst t5x_dispatch ' cmpl r0,#0056' ! Test 56 ? ' beql test_56' ! br if so ' jmp l^test_50_54' exit ex/inst def free_area = . ! start of "patch area" def free_size = - free_area ! size of "patch area" ! !--- point to NEW "T 5x" dispatcher ! replace/long +phy_test_50_54 exit +phy_t5x_dispatch exit ! !------------------------------------------------------------------------------- !----- part 3: within VMB, replace TVBTDRIVER by (own) DK2KBTDRIVER ! def btab_mua = 200537D9 - ka410rom ! def TVBTDRIVER = 2005630D - ka410rom def TVBTDRIVER_DRIVRNAME= 200565D7 - ka410rom def TVBTDRIVER_AUXDRNAME= 200565E4 - ka410rom def TVBTDRIVER_DEVNAME = 200565F1 - ka410rom def TVBTDRIVER_UNIT_INIT= 20056616 - ka410rom def TVBTDRIVER_ENTRY = 200566E1 - ka410rom def TVBTDRIVER_UNIT_DISC= 200576E5 - ka410rom def TVBTDRIVER_END = 200576FF - ka410rom ! ESBTDRIVER starts here ! def BOO$DRIVER_TBL = 20058500 - ka410rom ! ^d10 longwords per driver: ! ! DU, TV("MU"), ES ! def BTD$K_SCSI_5380_TAPE = 0025 !! "boot device code" associated with MUA0 def BTD$K_SCSI_5380_DISK = 002A !! I'd like to use this for DKAn, however ! !! (as of VMS V5.5-2) INIADP410 will map the ! !! SCSI port only for BTD$K_SCSI_5380_TAPE. ! !*** ! replace/word/ascii btab_mua ! .ascii "MU" -> "DK" 'MU' exit 'DK' exit ! verify/word btab_mua + 2 ! .asciz "A" +0041 exit ! replace/word btab_mua + 4 ! maxunit +0000 exit +0007 exit ! verify/word btab_mua + 6 ! boot device type, must match BOO$DRIVER_TBL +BTD$K_SCSI_5380_TAPE ! Can't change this (see above comments); exit ! old value is fine, with at least VMS V5.5-2 ! verify/long btab_mua + 8 +IO410$AB_SCTLS exit ! !*** ! def drv_base = TVBTDRIVER ! !@@@@ start DK2KBTDRIVER.PAT 2-APR-1999 13:08:14.48 ! ! Data generated from DK2KBTDRIVER.BIN ! def DK2KBTDRIVER_ENTRY = drv_base + 0000025C def DK2KBTDRIVER_DRIVRNAME = drv_base + 00000050 def DK2KBTDRIVER_AUXDRNAME = drv_base + 0000005D def DK2KBTDRIVER_UNIT_INIT = drv_base + 000000A5 def DK2KBTDRIVER_UNIT_DISC = drv_base + 00000FA1 def DK2KBTDRIVER_DEVNAME = drv_base + 0000006A ! ! def DK2KBTDRIVER_LENGTH = 000013AB ! deposit/long drv_base ! replace previous driver 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 0FFFFFFFF 000000000 0444B440C 045564952 058452E52 04B500C45 052444B32 0452E5256 04B444558 000001B06 006000100 000000000 003060000 008000000 000080600 000000000 00000280A 000000000 006000000 00000000A 02A0A0000 000000000 000000000 09501FC00 00F1282AF 09F0302EF 0200B00BC 001509C50 03CFF71CF 0125564A9 06BCF9107 0281301FF 0648F55D1 018000000 00755D11F 08FD00815 000000908 0559C0450 0FF4CCF01 000648FC5 050550000 064A950B0 0FF3CCF91 013FF35CF 0F88FB0DD 0DB1EA901 040D05038 08A5754A9 0D008A702 0F2305005 04450E800 0305005D0 050E800E9 08F50D13B 0000001A4 0CA302013 0408FDD00 0F5000F42 08ED5FD6E 0305005D0 050E800C9 08F50D11B 0000001A4 093300512 0D0C91100 0003A988F 0AE305000 00E50E900 008EF00E2 003000000 0D0001930 000045009 000101506 00C000C00 008000000 000000000 000020000 0E8049A30 03F300350 0E0AF7D0A 030FE75CF 050E80554 00A303003 0E8001030 027300350 005C7300A 0300350E8 07D050A1E 0C5307E51 00350E806 09A0A1130 0D2305000 00350E806 09E0A0530 09A52ADAF 082905182 005463050 093F751F5 01214A708 05001D0FA 005518E7D 0FE8CCF7D 030FE1DCF 050E90433 004F63009 0300350E9 090050575 004A7808F 06EF50CDD 0948ED5FD exit deposit/long drv_base+00000200 0DD0504A7 0126ED750 0A48FD009 050000001 004304711 00950E804 009088FD0 011500000 04ECF7D38 0FDD8CFFE 03004B730 050E80539 0CF029128 00313FE16 091098930 0FE0DCF00 07F300313 00400EF09 050FDC3CF 013500291 0500691B4 06B30AF13 0058ED509 0AC0600EF 050D15010 031031220 038DB01B5 0CEFDD5CF 0CFFDD1CF 0ACC0FDCE 0FDC8CF14 05A04ACD0 0B3CF52D0 01509EFFD 0FDB0CF5A 0AFCF5AD0 0031F30FD 083CF55D0 0CF55D0FD 058D5FD86 08FD00712 000010000 0CF5AD058 058D0FD66 0D0FD65CF 0FD68CF58 0CFD0507C 07B50FD62 00002008F 051505000 0021351D5 050D150D6 00000FF8F 09A041500 0D050FF8F 0FD48CF50 002008FC5 058500000 0FD38CFD1 01FFFFF8F 07D231A00 0CFFD8ACF 05090FD06 090FD06CF 0CFFD21CF 0CF90FCFE 0F6CFFD1B 015CF90FC 0FCEECFFD 0CF7D2C11 0E3CFFD6E 0E7CFD4FC 0CF5090FC 0CF90FCE3 0D9CFFCFA 0F4CF90FC 0FCD1CFFC 0FCEECF90 090FCC9CF 0CFFCE8CF 0D430FCC1 05050E902 0E8039730 073300350 0051E3008 03050019A 050E90531 005123057 014A70893 067904E13 0B3CFD550 0D70715FC 030FCADCF 0CC300227 0E158F503 0E803E830 03D300650 01050E900 0FC94CFD5 0CFC00A15 08FCFFC96 0FF2031FC 0FC7CCFD0 073CFD058 0CFC25AFC 06FCFFC7A 06FCFD0FC 0CFD055FC 00551FC66 0E903B030 007300350 000023008 08FDDD611 000000054 080CF0091 0D04C12FC 00008708F 001D06E00 0CF05E16E 0E009FC30 0FC28CF07 007DC3036 0CF0400EF 09150FC20 027135001 001F48FD0 0916E0000 01B135003 exit deposit/long drv_base+00000400 000548FD0 0916E0000 00F135004 001A48FD0 0916E0000 003135002 0D007A930 0DB05508E 0FC20CF38 0FC1CCFCE 0C0FC19CF 013CF14AC 004ACD0FC 008ACD05A 00CACD058 0CF52D055 009EFFBF6 0F3CF5A15 0CF5AD0FB 06230FBF2 0CF55D001 055D0FBC6 0D0FBC9CF 0FBB4CF5A 0B3CF58D0 0CF58D0FB 0507CFBB6 0FBB0CFD0 0008F7B50 050000002 051D55150 050D60213 0FF8F50D1 015000000 0FF8F9A04 0CF50D050 08FC5FB96 000000200 0CFD15850 0FF8FFB86 01A001FFF 0EACF7D23 0FB54CFFB 054CF5090 06FCF90FB 0FB4CCFFB 0FB69CF90 090FB44CF 0CFFB63CF 02C11FB3C 0FBCECF7D 0D4FB31CF 090FB35CF 0FB31CF50 0FB48CF90 090FB27CF 0CFFB42CF 0CF90FB1F 017CFFB3C 036CF90FB 0FB0FCFFB 0E9012230 0E5307250 00350E801 03006C130 0009A036C 0037F3050 0D47950E9 00BCFD550 0D70715FB 030FB05CF 008930078 0641314A7 010A72093 05090F413 004A79067 0E08F8A50 050018850 004A75090 004306ED5 004A79002 0E18F8A50 0A7509050 0BF58F504 0E8021430 069300650 01050E9FE 0FAC0CFD5 0CFC00A15 0BBCFFAC2 0FEFE31FA 0FAA8CFD0 09FCFD058 0CFC25AFA 09BCFFAA6 09BCFD0FA 0CFD055FA 00451FA92 0E901DC30 033300350 0FE2E3006 0DF90D611 01150FAA6 0DF509005 0CFD6FA9E 08FB3FA9A 093CF01FF 0D62A12FA 0D5FA89CF 013FA8DCF 0CA1F1920 0FFFE008F 0FA7CCFFF 07D7E567D 056FA6DCF 0F06647DD 0CF15098E 08E7DFA6A 08FCA0556 0FFFFFE00 07DFA5DCF 0EF9E7E56 000000BBF 0FF8FCA56 056000001 047CF56C8 01509EFFA 0A9D05656 exit deposit/long drv_base+00000600 046DE5750 08FC95767 090000000 067FA2DCF 0FA2CCFDA 0568E7D3A 00CA79405 0501CA790 0FA08CF90 0A7018867 0F48FD008 0CF000001 0A790FA02 08F935004 008125040 0F9F4CFF5 0009631F1 06EF501DD 0908ED5FD 0935004A7 006135020 008A7018A 0CF8BCB11 05067F9CE 0C7CF5091 090ED1AF9 0935004A7 0E4125020 05004A790 050E08F8A 090500488 0DD04A750 0FD6EF501 0CF898ED5 0A3CFF9A2 0509050F9 004A79067 0E08F8A50 050098850 004A75090 008A7018A 09010A794 08A5004A7 09050E88F 0D004A750 007A1208F 0F978CF00 0A7408F93 0F5071210 0F4F96DCF 0A7901011 08F8A5004 0509050E5 001D004A7 08FD00550 000000054 0517D0550 0018A307E 03050029A 050E9019D 00BCF9E1E 0829A52F9 050829051 0F5001330 00893F751 0FA1214A7 07D5001D0 03005518E 0089304B2 0031214A7 09304A930 01310A720 0675090F1 05004A790 050E08F8A 090500188 0D504A750 0000D306E 05004A790 050E18F8A 004A75090 004A79005 0E08F8A50 050108850 004A75090 010A72093 0A790FA12 08F8A5004 0509050F0 0D50504A7 018F8DDCF 0FF8F9006 0D6F8DACF 030F8D1CF 0039A00F8 0010B3050 0300350E8 0CFD0043E 09050F8BE 0BBCF4067 0FFB130F8 09A00DB30 0EE305007 00350E800 0D0042130 050F8A1CF 0CF406790 09430F8A0 0408F93FF 0F91210A7 0501CA790 000548FDD 0CFD00000 09150F882 07FCF4000 0910B12F8 079CF4000 0D00312F8 06EE86E01 067CFD509 0300314F8 08ED0001E 05BCFD750 01350E8F8 058CF0091 0ED0C12F8 011CF0400 0031201F8 exit deposit/long drv_base+00000800 0055001D0 07D7E517D 0CFF86FCF 00830F7F2 00350E8FE 03003AD30 050E8FEC8 003A43003 09A004F30 062305001 04350E900 09E5108D0 052F7D9CF 093003B30 01214A708 003843003 030826790 051F5FEFF 0BFCF9EEB 0A29052F7 0A2905006 09006A203 09003A250 0905005A2 005A204A2 004A25090 07DFEFC30 03005518E 08F930352 01210A740 003483008 050548F9A 0A7209305 0D0EB1310 0DD055001 010A79051 00302EF51 050915151 090221251 0D00CA751 00003E88F 0F78CCF00 014A70893 0CFF50812 030F5F782 001D0030E 0518ED050 01150D405 0000000F8 000000000 000000000 000000000 000000000 0324B4400 04454424B 045564952 061682052 06E69746C 074612067 06C657220 076697461 064612065 073657264 000002073 020200000 04B324B44 052445442 052455649 073616220 064612065 03D207264 000000020 000000000 0520D0A00 053494745 053524554 052202020 000203A30 000000000 020000000 031522020 00000203A 000000000 020200000 03A325220 000000020 000000000 020202000 0203A3352 000000000 000000000 020200D0A 020202020 020202020 034522020 00000203A 000000000 020200000 03A355220 000000020 000000000 020202000 0203A3652 000000000 000000000 052202020 000203A37 000000000 00A000000 02020200D 020202020 020202020 03A385220 000000020 000000000 020202000 0203A3952 000000000 000000000 031522020 000203A30 000000000 020000000 031315220 00000203A 000000000 00D0A0000 020202020 exit deposit/long drv_base+00000A00 020202020 020202020 0203A5041 000000000 000000000 046202020 000203A50 000000000 020000000 050532020 00000203A 000000000 020200000 03A435020 000000020 000000000 0430D0A00 05542444D 000203A46 000000000 020000000 000000000 000000000 045532020 05F45534E 03A465542 000000020 000000000 000002000 000000000 00D0A0000 054415453 0425F5355 0203A4655 020200000 020202020 020202020 053202020 045534E45 04154535F 03A535554 00A000020 047534D0D 05F4E495F 03A465542 020000020 020202020 020202020 020202020 0534E4553 0534D5F45 04E495F47 00000203A 020202020 020202020 04E455320 0495F4553 05845444E 00000203A 000000000 00D0A0000 052455355 04655425F 04444415F 000203A52 000000000 020000000 055202020 05F524553 05F465542 03A4E454C 000000020 000000000 020202000 020572F52 045545942 0454C5F53 0203A5446 000000000 000000000 047500D0A 04241545F 0505F454C 0203A5254 000000000 000000000 020202020 053414220 050565F45 000203A4E 000000000 020000000 020202020 055422020 052454646 05254505F 00000203A 000000000 00D0A0000 05F50414D 045444F4D 00000203A 000000000 00D0A0000 043415453 020203A4B 000000000 000000000 020200D0A 020202020 000002020 000000000 00D0A0000 0F438CF9F 0CF6E8EC3 0AE9EFCF3 08FBB7E04 038DB3FFF 0D0081350 000DEAD8F 030005000 0CFD0038F 011CFFCDF 00FCF9EFD 0FCCDCFF4 07D037E30 0CFFCCACF 08FD0FD1F exit deposit/long drv_base+00000C00 000000052 09EFCC6CF 0CFFCCACF 0CF9EFCC3 01650FCBB 004004C9F 0CF8ED020 05430FCA3 0A0CF7D03 0FD0FCFFC 094CF8ED0 0034530FC 0FC91CF7D 0D0FD0FCF 0FC85CF8E 07D033630 0CFFC82CF 08ED0FD0F 030FC76CF 0CF7D0327 00FCFFC73 0CF8ED0FD 01830FC67 064CF7D03 0FD1ACFFC 058CF8ED0 0030930FC 0FC55CF7D 0D0FD1ACF 0FC49CF8E 07D02FA30 0CFFC46CF 08ED0FD1A 030FC3ACF 0CF7D02EB 01ACFFC37 0CF8ED0FD 0DC30FC2B 028CF7D02 0FD25CFFC 01CCF8ED0 002CD30FC 0FC19CF7D 0D0FD25CF 0FC0DCF8E 07D02BE30 0CFFC0ACF 08ED0FD25 030FBFECF 0CF7D02AF 025CFFBFB 0CF8ED0FD 0A030FBEF 0ECCF7D02 0FD30CFFB 0E0CF8ED0 0029130FB 0FBDDCF7D 0D0FD30CF 0FBD1CF8E 07D028230 0CFFBCECF 08ED0FD30 030FBC2CF 0CF7D0273 030CFFBBF 0478FD0FD 0CF000000 0CF9EFBBB 0B8CFFC11 0B0CF9EFB 09F1650FB 02004004C 000478FD0 0A0CF0000 03DCF9EFB 0FB9DCFFC 0FB95CF9E 04C9F1650 0D0200400 00000478F 0FB85CF00 0FC69CF9E 09EFB82CF 050FB7ACF 0004C9F16 08FD02004 000000047 09EFB6ACF 0CFFC95CF 0CF9EFB67 01650FB5F 004004C9F 087CFD020 0FB45CFF2 07D01F630 0CFFB42CF 0CFD0FCCE 034CFF27A 001E530FB 0FB31CF7D 091FCB4CF 006F265CF 08FB00714 0A6CF3030 063CFD0FC 0FB15CFF2 07D01C630 0CFFB12CF 0CFD0FCBC 004CFF256 001B530FB 0FB01CF7D 0D0FCA2CF 0FB01CF39 0FC73CF9E 09EFAFECF 050FAF6CF 0004C9F16 0CFD02004 0DCCFF26A 0018D30FA 0FAD9CFB0 0B0FCE3CF 0CFFAD4CF 0CFB0FCBF 0A8CFFACF 0CACFB0FC exit deposit/long drv_base+00000E00 0FC84CFFA 0F240CFD0 030FAB6CF 0CF7D0167 0D5CFFAB3 0CF2DD0FC 0CF9EFAB3 0B0CFFC5E 0A8CF9EFA 09F1650FA 02004004C 0004B8FD0 098CF0000 070CF9EFA 0FA95CFFC 0FA8DCF9E 04C9F1650 0D0200400 0CFF1C9CF 02430FA73 070CF7D01 0FCABCFFA 0F1BCCFD0 030FA62CF 0CF7D0113 0B4CFFA5F 0B3CFD0FC 0FA51CFF1 07D010230 0CFFA4ECF 08FD0FCBE 00000004E 09EFA4ACF 0CFFC6DCF 0CF9EFA47 01650FA3F 004004C9F 09FCFD020 0FA25CFF1 07D00D630 0CFFA22CF 0CFD0FCAA 014CFF192 000C530FA 0FA11CF7D 0D0FCB0CF 0CFF185CF 0B430FA03 000CF7D00 0FCBACFFA 0004A8FD0 0FCCF0000 06DCF9EF9 0F9F9CFFC 0F9F1CF9E 04C9F1650 0D0200400 0CFF15DCF 08830F9D7 0D4CF7D00 0FCA2CFF9 0D4CF14D0 08FCF9EF9 0F9D1CFFC 0F9C9CF9E 04C9F1650 0D0200400 066D0565E 030F9AECF 0CF7D005F 08BCFF9AB 0CF12D0FC 0CF9EF9AB 0A8CFFC7A 0A0CF9EF9 09F1650F9 02004004C 09E5205D0 0D05604A6 0F981CF66 07D003230 0CFF97ECF 012D0FC70 09EF97ECF 0CFFC5FCF 0CF9EF97B 01650F973 004004C9F 0D352F520 032313000 036353433 041393837 045444342 0D00FBB46 051F946CF 09E5208D0 053F941CF 050FC8F79 0E48F7850 08FCA5050 0FFFFFFF0 0AF409050 0F56342CC 00FBAE652 0DB008005 040D05038 0045754A9 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 exit deposit/long drv_base+00001000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 exit deposit/long drv_base+00001200 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 exit ! ! End of data generated from DK2KBTDRIVER.BIN ! !@@@@ end DK2KBTDRIVER.PAT ! !*** ! def drv_length = TVBTDRIVER_END - TVBTDRIVER !! !! DK2KBTDRIVER must fit into the space formerly occupied by TVBTDRIVER !! def room_left = drv_length - DK2KBTDRIVER_LENGTH !! !! Check that room_left is .ge.0 - the following comes out as -1 if not so: def zero_is_ok = room_left@<-<^d30>> ! (sign-extended sign bit) !! ... and if this is indeed negative, the next command will abort PATCH examine zero_is_ok ! output of this command doesn't matter !! !! end of DK2KBTDRIVER length check ! !*** ! def tbl_ent = BOO$DRIVER_TBL + <1*<^d40>> ! 2nd entry ! verify/word tbl_ent 0FFFF ! -1 => no check for CPUTYPE +BTD$K_SCSI_5380_TAPE ! `device type' must match "btab", can't change exit ! verify/long tbl_ent + 4 +00000000 ! no `action' (otherwise ) + ! driver size (must not change) + ! start of driver (does not change) exit ! replace/long tbl_ent + <4*4> + ! => I/O routine entry (JSB) + ! => name of primary driver (.ascic) + ! => name of port driver (.ascic), or 0 + ! => init routine (CALL) + ! => cleanup routine (CALL) + ! => device name (.ascii, 2 bytes) exit + + + + + + exit ! !------------------------------------------------------------------------------- ! update exit