Advertisement
Guest User

Untitled

a guest
Mar 5th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.19 KB | None | 0 0
  1. ; Начальный загрузчик для ПК Вектор-06Ц (версия 2)
  2. ; Дизассемблирован 17.10.96. Тимошенко А.В.
  3. ;--------------------------------------------------
  4. .ORG 0
  5. M0000H: MVI A,9BH
  6. OUT 04
  7. MVI A,88H
  8. OUT 00
  9. LXI SP,0DCF0H ; установить верхушку стека
  10. LXI D,55AAH
  11. M000EH: PUSH D
  12. POP H
  13. MOV A,L
  14. CMA
  15. CMP H
  16. JNZ M000EH
  17. MVI A,0A8H
  18. LXI B,0040H
  19. M001BH: OUT 08
  20. SUB C
  21. JNC M001BH
  22. MOV C,B
  23. MVI A,06
  24. OUT 00
  25. XRA A
  26. OUT 10H
  27. M0029H: STAX B ; чистка ОЗУ
  28. INX B
  29. STAX B ; эти две команды вполне
  30. INX B ; можно убрать если не хватает ресурсов
  31. CMP C ; или добавить, для скорости очистки
  32. JNZ M0029H
  33. CMP B
  34. JNZ M0029H
  35. JMP M0039H
  36.  
  37. .ORG 38H
  38. M0038H: RET ; обработка аппаратных прерываний
  39.  
  40. M0039H: LXI D,0009
  41. M003CH: MOV H,B ; загрузка пары HL нулями
  42. MOV L,D
  43. CALL M0545H
  44. DCR L
  45. MVI M,0FFH ; вывод 1/32 нижней полосы
  46. DAD D ; адрес экрана на 9 точек выше
  47. MVI M,0FFH ; вывод 1/32 верхней полосы
  48. INR L ; адрес экрана на точку выше
  49. MVI M,81H ; вывод точек над верхней полосой
  50. INR B ;
  51. JNZ M003CH ; пока не выведены все полосы - цикл
  52. EI ; разрешить прерывания
  53. HLT ; ожидать прерывания
  54. CALL M02A1H ; цвета/клавиатура
  55. LXI H,M0760H ; надпись ВЕКТОР-06Ц
  56. LXI D,0C4E9H ; адрес в экране
  57. MVI A,08 ; высота букв
  58. MVI B,07 ; число столбцов
  59. CALL M06B7H ; вывод рисунка на экран
  60. LXI H,M009FH ; адрес входа
  61. PUSH H ; адрес входа поместить в стек
  62. MVI A,0C3H ; в А код С9 - JMP
  63. STA 0DCF1H ; JMP по адресу 0DCF1H
  64. STA 0DCF4H ; JMP по адресу 0DCF4H
  65. LDA 0DEF7H ; читать код клавиши
  66. CPI 0F7H ; клавиша F1
  67. JZ M044BH ; переход на кассету
  68. CPI 0EFH ; клавиша F2
  69. JZ M0090H ; переход на ППЗУ и кассету
  70. CPI 0E7H ; клавиши F1 и F2
  71. JZ M0084H ; переход на дисковод
  72. CALL M055EH ; проверка наличия квазидиска
  73. JNZ M059DH ; переход на квазидиск
  74. M0084H: CALL M00D9H ; проверка локальной сети
  75. JNZ M0148H ; переход на адаптер локальной сети
  76. CALL M0138H ; проверка наличия дисковода
  77. JNZ M02E7H ; переход на дискету
  78. M0090H: CALL M00D9H
  79. JNZ M044BH ; переход на кассету
  80. CALL M0107H ; проверка наличия модуля ППЗУ
  81. JNZ M0274H ; переход на ППЗУ
  82. JMP M044BH ; переход на кассету
  83.  
  84. ; подпрограмма после загрузки ожидание нажатия БЛК+СБР
  85. M009FH: MVI A,9BH
  86. OUT 04
  87. MVI A,03
  88. OUT 00
  89. M00A7H: EI ; разрешить прерывания
  90. HLT ; ожидать прерывания
  91. CALL M02A1H ; цвета/клавиатура
  92. LDA 0DEF7H ; читать код клавиши
  93. CPI 0D7H ; клавиши F1 и F3
  94. JNZ M00CAH ; если не совпало - не выдавать авторов
  95. LXI H,M06DAH ; текст авторства
  96. LXI D,0C0DAH ; адрес в экране
  97. MVI A,0FH ; высота букв
  98. MVI B,02 ; ширина надписи в кол-ве по 8 бит
  99. CALL M06B7H ; вывод надписи
  100. MVI E,0DDH ; коррекция адреса в экране
  101. MVI A,08 ; высота букв
  102. MVI B,0DH ; ширина надписи
  103. CALL M06B7H ; вывод надписи
  104. M00CAH: INX B
  105. MOV A,C
  106. ANI 08
  107. MVI A,07
  108. JNZ M00D4H
  109. DCR A
  110. M00D4H: OUT 00
  111. JMP M00A7H
  112.  
  113. ; проверка наличия адаптера локальной сети
  114. M00D9H: MVI B,04
  115. IN 07
  116. ORI 0E0H
  117. MOV C,A
  118. MVI A,8BH
  119. OUT 04
  120. M00E4H: MOV A,C
  121. OUT 07
  122. XTHL
  123. XTHL
  124. IN 05
  125. ANI 08
  126. JZ M0102H
  127. MVI A,7FH
  128. ANA C
  129. OUT 07
  130. IN 05
  131. CMA
  132. ANI 08
  133. JZ M0102H
  134. DCR B
  135. JNZ M00E4H
  136. ORA A
  137. M0102H: MVI A,9BH
  138. OUT 04
  139. RET
  140.  
  141. ; проверка наличия модуля ППЗУ
  142. M0107H: MVI A,82H ; код управления порта
  143. OUT 04 ; записать в РУС
  144. MVI B,0FFH ;
  145. M010DH: MOV A,B ;
  146. OUT 05 ;
  147. MVI A,0FEH ;
  148. OUT 07 ;
  149. IN 06 ;
  150. CPI 55H ; проверка ключевого кода 55
  151. JNZ M012EH ; код не совпал
  152. MVI A,0FFH ;
  153. OUT 07 ;
  154. IN 06 ;
  155. CPI 0AAH ; проверка ключевого кода AA
  156. JNZ M012EH ;
  157. MOV A,B ;
  158. ANI 7FH ;
  159. INR A ;
  160. MOV D,A ;
  161. JMP M0136H ; МППЗУ подключен - на выход
  162. M012EH: MOV A,B ;
  163. SUI 20H ;
  164. MOV B,A ;
  165. JM M010DH ;
  166. XRA A ; обнулить А - МППЗУ не подключен
  167. M0136H: ORA A ;
  168. RET
  169.  
  170. ; проверка наличия дисковода
  171. M0138H: MVI A,0BH
  172. OUT 19H
  173. MOV C,A
  174. XTHL
  175. XTHL
  176. IN 19H
  177. CMP C
  178. JZ M0146H
  179. XRA A
  180. M0146H: ORA A
  181. RET
  182.  
  183. M0148H: LXI H,M07ECH ; рисунок адаптера локальной сети
  184. MVI A,8AH
  185. CALL M06B2H ; вывод рисунка на экран
  186. LXI H,M021FH ; адрес
  187. SHLD 0DCF2H
  188. LXI H,M015CH ; адрес
  189. SHLD 0DCF5H
  190. M015CH: MVI A,9BH
  191. OUT 04
  192. IN 07
  193. ANI 1FH
  194. MOV C,A
  195. MVI B,0AH
  196. M0167H: IN 05
  197. ANI 70H
  198. CPI 40H
  199. JNZ M015CH
  200. IN 06
  201. ANI 1FH
  202. CMP C
  203. JNZ M015CH
  204. DCR B
  205. JNZ M0167H
  206. IN 06
  207. MOV B,A
  208. MVI A,98H
  209. OUT 04
  210. MOV A,C
  211. OUT 06
  212. XRA A
  213. OUT 05
  214. MVI D,0FAH
  215. M018BH: DCR D
  216. JZ M015CH
  217. IN 05
  218. ANI 70H
  219. CPI 70H
  220. JNZ M018BH
  221. MVI A,9BH
  222. OUT 04
  223. MOV A,B
  224. ANI 0E0H
  225. JNZ M015CH
  226. MVI E,03
  227. M01A4H: MVI A,08
  228. CALL 0DCF1H
  229. CPI 55H
  230. JZ M01B3H
  231. CPI 0AAH
  232. JNZ 0DCF4H
  233. M01B3H: DCR E
  234. JNZ M01A4H
  235. M01B7H: CALL M04D8H
  236. MOV E,A
  237. MOV A,M
  238. CPI 00
  239. JNZ M01B7H
  240. LXI H,0DEF1H
  241. MOV A,M
  242. DCX H
  243. CMP M
  244. JNZ 0DCF4H
  245. MOV D,A
  246. DCX H
  247. MOV B,M
  248. M01CDH: CALL M04D8H
  249. M01D0H: PUSH PSW
  250. MOV A,M
  251. CPI 00
  252. JZ M020AH
  253. ADD A
  254. ADD A
  255. ADD A
  256. ADD A
  257. ADD A
  258. MOV C,A
  259. POP PSW
  260. INX H
  261. MOV A,M
  262. CMP E
  263. JNZ M01CDH
  264. PUSH D
  265. PUSH B
  266. INX H
  267. LXI D,207EH
  268. M01EAH: MOV A,M
  269. STAX B
  270. LDAX B
  271. XRA M
  272. MOV M,A
  273. INX H
  274. INR C
  275. DCR D
  276. JNZ M01EAH
  277. POP B
  278. MOV L,C
  279. MOV H,B
  280. CALL M0545H
  281. MOV M,E
  282. POP D
  283. CALL M047DH
  284. JZ M01CDH
  285. MOV A,D
  286. CPI 01
  287. JNZ M01CDH
  288. RET
  289.  
  290. M020AH: POP PSW
  291. SUB E
  292. JZ M01CDH
  293. INR A
  294. JNZ M0000H ;начало
  295. CALL M047DH
  296. JZ M0000H ; начало
  297. DCR E
  298. INR B
  299. DCR D
  300. JMP M01CDH
  301.  
  302. M021FH: PUSH D
  303. MVI D,70H
  304. CPI 0FFH
  305. CZ M0255H
  306. CALL M022CH
  307. POP D
  308. RET
  309.  
  310. M022CH: MVI E,60H
  311. M022EH: IN 05
  312. ANA D
  313. CPI 40H
  314. JZ M0000H ; НАЧАЛО
  315. CMP E
  316. JNZ M022EH
  317. IN 06
  318. PUSH PSW
  319. MVI A,9AH
  320. OUT 04
  321. XRA A
  322. OUT 05
  323. M0244H: DCR E
  324. JZ M024FH
  325. IN 05
  326. ANA D
  327. CMP D
  328. JNZ M0244H
  329. M024FH: MVI A,9BH
  330. OUT 04
  331. POP PSW
  332. RET
  333.  
  334. M0255H: CALL M022CH
  335. CPI 0E6H
  336. JNZ M0255H
  337. RET
  338.  
  339. ;-------- temirazov & sokolov -----------------
  340. M025EH: .DB 74H, 65H, 6DH, 69H, 72H, 61H, 7AH, 6FH, 77H, 20H, 64H
  341. .DB 2EH, 73H, 6FH, 6BH, 6FH, 6CH, 6FH, 77H, 20H, 61H, 2EH
  342.  
  343. ; чтение программы из внешнего ППЗУ
  344. M0274H: LXI H,M07DEH ; рисунок ПЗУ
  345. MVI A,87H ; высота рисунка
  346. PUSH D ; сохранить DE
  347. CALL M06B2H ; вывод рисунка на экран
  348. POP D ; восстановить DE
  349. LXI B,0000 ;
  350. LXI H,8000H ;
  351. M0284H: MOV A,L ;
  352. OUT 07 ;
  353. MOV A,H ;
  354. OUT 05 ;
  355. IN 06 ;
  356. STAX B ;
  357. INX H ;
  358. INX B ;
  359. MOV A,B ;
  360. CMP D ;
  361. JNZ M0284H ;
  362. LXI H,0000 ;
  363. M0297H: CALL M03B5H ; вывод блока в загрузочную таблицу
  364. INR H ;
  365. MOV A,H ;
  366. CMP D ;
  367. JNZ M0297H ; пока не выведены все блоки
  368. RET
  369.  
  370. ; программирование цветов, опрос клавиатуры - якобы обработка прерываний
  371. M02A1H: LXI H,M02D7H ; адрес палитры цветов
  372. PUSH PSW
  373. PUSH B
  374. PUSH H
  375. MVI B,0FH
  376. M02A9H: MOV A,B
  377. OUT 02
  378. MOV A,M
  379. OUT 0CH ;
  380. INR E
  381. OUT 0CH ;
  382. INX H
  383. OUT 0CH ;
  384. DCR E
  385. DCR B
  386. OUT 0CH ;
  387. JP M02A9H
  388. MVI A,8AH ; управляющее слово
  389. OUT 00 ; запись УС в РУС
  390. MVI A,0FDH ; выбор линейки клавиатуры
  391. OUT 03 ; запись
  392. IN 02 ; читать код клавиши из порта
  393. STA 0DEF7H ; сохранить код клавиши в ЯП 0DEF7H
  394. MVI A,88H
  395. OUT 00
  396. XRA A
  397. OUT 02
  398. DCR A
  399. OUT 03
  400. POP H
  401. POP B
  402. POP PSW
  403. RET
  404.  
  405. ; палитра цветов
  406. M02D7H: .DB 2DH,2DH,80H,80H,2DH,2DH,80H,80H,2DH,2DH,80H,80H,2DH,2DH,80H,80H
  407.  
  408. ; работа с дисководом
  409. M02E7H: LXI H,M07CAH ; рисунок ДИСКЕТЫ
  410. MVI A,8AH ; высота рисунка (без старшего байта)
  411. CALL M06B2H ; вывод рисунка в экран
  412. MVI A,34H
  413. STA 0DED0H
  414. CALL M043FH
  415. MVI A,03
  416. CALL M042CH
  417. MVI A,10H
  418. STA 110CH
  419. MVI A,01
  420. OUT 19H
  421. LXI D,1100H
  422. CALL M03C6H
  423. LXI H,1100H
  424. LXI D,0DEF1H
  425. MVI C,1FH
  426. MVI A,66H
  427. M0315H: ADD M
  428. PUSH PSW
  429. MOV A,M
  430. STAX D
  431. POP PSW
  432. INX H
  433. DCX D
  434. DCR C
  435. JNZ M0315H
  436. SUB M
  437. JNZ M0000H ; переход на начало !!!!!!!!!!!!!
  438. STAX D
  439. LDA 1104H
  440. MOV C,A
  441. LXI H,1100H
  442. XCHG
  443. M032DH: XRA A
  444. M032EH: INR A
  445. OUT 19H
  446. PUSH B
  447. CALL M03C6H
  448. POP B
  449. JNZ M0000H ; переход на начало !!!!!!!!!!!!!
  450. DCR C
  451. JZ M037EH
  452. IN 19H
  453. LXI H,110CH
  454. CMP M
  455. JC M032EH
  456. LDA 110BH
  457. ORA A
  458. JZ M0369H
  459. LDA 0DED0H
  460. ANI 04
  461. LDA 0DED0H
  462. JZ M0362H
  463. ANI 0FBH
  464. STA 0DED0H
  465. OUT 1CH
  466. JMP M032DH
  467.  
  468. M0362H: ORI 04
  469. STA 0DED0H
  470. OUT 1CH
  471. M0369H: CALL M042AH
  472. LDA 0110EH
  473. CPI 28H
  474. CZ M042AH
  475. LXI H,0DED2H
  476. INR M
  477. MOV A,M
  478. OUT 1AH
  479. JMP M032DH
  480.  
  481. M037EH: LXI B,1180H
  482. LHLD 1100H
  483. XCHG
  484. MOV A,E
  485. SUB C
  486. MOV A,D
  487. SBB B
  488. XCHG
  489. JNC M039BH
  490. M038DH: LDAX B
  491. CALL M03B0H ; вывод блока в таблицу
  492. INX B
  493. INX H
  494. MOV A,E
  495. SUB C
  496. MOV A,D
  497. SBB B
  498. RC
  499. JMP M038DH
  500.  
  501. M039BH: DAD D
  502. MOV A,L
  503. SUB C
  504. MOV L,A
  505. MOV A,H
  506. SBB B
  507. MOV H,A
  508. M03A2H: LDAX D
  509. CALL M03B0H ; вывод блока в таблицу
  510. MOV A,E
  511. SUB C
  512. MOV A,D
  513. SBB B
  514. RC
  515. DCX D
  516. DCX H
  517. JMP M03A2H
  518. ; загрузка в таблицу блока 256 байт после чтения ППЗУ
  519. M03B0H: MOV M,A
  520. MOV A,L
  521. CPI 00
  522. RNZ
  523. M03B5H: PUSH H
  524. PUSH B
  525. CALL M0545H
  526. MVI C,08 ; высота одного блока
  527. M03BCH: MVI M,7EH ; запись одной полосы блока
  528. INR L ; адрес выше на точку
  529. DCR C ; уменьшить счетчик полос
  530. JNZ M03BCH ; пока не выведен весь блок
  531. POP B
  532. POP H
  533. RET
  534.  
  535. M03C6H: CALL M043FH
  536. MVI A,84H
  537. MVI H,02
  538. OUT 1BH
  539. M03CFH: IN 1BH
  540. RRC
  541. JNC M03CFH
  542. LDA 0110CH
  543. CPI 10H
  544. JZ M0411H
  545. CPI 08
  546. JZ M0403H
  547. CPI 09
  548. JZ M0403H
  549. M03E7H: IN 1BH
  550. ANA H
  551. JZ M03E7H
  552. IN 18H
  553. STAX D
  554. INR E
  555. JNZ M03E7H
  556. INR D
  557. M03F5H: IN 1BH
  558. ANA H
  559. JZ M03F5H
  560. IN 18H
  561. STAX D
  562. INR E
  563. JNZ M03F5H
  564. INR D
  565. M0403H: IN 1BH
  566. ANA H
  567. JZ M0403H
  568. IN 18H
  569. STAX D
  570. INR E
  571. JNZ M0403H
  572. INR D
  573. M0411H: IN 1BH
  574. ANA H
  575. JZ M0411H
  576. IN 18H
  577. STAX D
  578. INR E
  579. JNZ M0411H
  580. INR D
  581. M041FH: IN 1BH
  582. RRC
  583. JC M041FH
  584. IN 1BH
  585. ANI 5CH
  586. RET
  587.  
  588. M042AH: MVI A,5BH
  589. M042CH: OUT 1BH
  590. XRA A
  591. M042FH: DCR A
  592. JNZ M042FH
  593. M0433H: LDA 0DED0H
  594. OUT 1CH
  595. IN 1BH
  596. RRC
  597. JC M0433H
  598. RET
  599.  
  600. M043FH: LDA 0DED0H
  601. OUT 1CH
  602. IN 1BH
  603. RLC
  604. RNC
  605. JMP M043FH
  606.  
  607. M044BH: LXI H,M0798H ; рисунок КАССЕТЫ
  608. MVI A,0DH ;
  609. CALL M06B2H ;
  610. MVI A,11H
  611. STA 0DEF6H
  612. LXI H,M04FCH ; адрес
  613. SHLD 0DCF2H
  614. LXI H,M044BH ; адрес кассеты
  615. SHLD 0DCF5H
  616. CALL M04ADH
  617. M0467H: MOV D,A
  618. ORA A
  619. RAR
  620. MOV E,A
  621. ADD D
  622. MOV H,A
  623. CALL M04ADH
  624. CMP H
  625. JC M0467H
  626. ADD D
  627. STA 0DEF6H
  628. MVI E,0CH
  629. JMP M01A4H
  630.  
  631. M047DH: MVI L,00
  632. MOV H,B
  633. CALL M0545H
  634. M0483H: MOV A,M
  635. ANA A
  636. RZ
  637. INX H
  638. CPI 81H
  639. JNZ M0483H
  640. ANA A
  641. RET
  642.  
  643. M048EH: PUSH D
  644. IN 01
  645. ANI 10H
  646. MOV E,A
  647. M0494H: IN 01
  648. ANI 10H
  649. CMP E
  650. JZ M0494H
  651. MOV E,A
  652. MVI D,01
  653. M049FH: IN 01
  654. ANI 10H
  655. INR D
  656. CMP E
  657. JZ M049FH
  658. MOV A,D
  659. ADD A
  660. ADD A
  661. POP D
  662. RET
  663.  
  664. M04ADH: PUSH H
  665. PUSH D
  666. M04AFH: CALL M048EH
  667. MOV B,A
  668. ORA A
  669. RAR
  670. MOV C,A
  671. LXI H,0000
  672. MVI D,20H
  673. M04BBH: CALL M048EH
  674. PUSH D
  675. MVI D,00
  676. MOV E,A
  677. DAD D
  678. POP D
  679. MOV E,A
  680. SUB B
  681. JNC M04CBH
  682. MOV A,B
  683. SUB E
  684. M04CBH: CMP C
  685. JNC M04AFH
  686. DCR D
  687. JNZ M04BBH
  688. DAD H
  689. MOV A,H
  690. POP D
  691. POP H
  692. RET
  693.  
  694. M04D8H: PUSH B
  695. PUSH D
  696. LXI H,0DED0H
  697. M04DDH: PUSH H
  698. LXI B,0023H
  699. MVI A,0FFH
  700. M04E3H: CALL 0DCF1H
  701. MOV M,A
  702. INX H
  703. ADD B
  704. MOV B,A
  705. MVI A,08
  706. DCR C
  707. JNZ M04E3H
  708. DCX H
  709. MOV A,B
  710. SUB M
  711. SUB M
  712. MOV A,M
  713. POP H
  714. JNZ M04DDH
  715. POP D
  716. POP B
  717. RET
  718.  
  719. M04FCH: PUSH B ; 1 вызов через HL (кассета)
  720. PUSH D
  721. MVI C,00
  722. MOV D,A
  723. M0501H: IN 01
  724. ANI 10H
  725. MOV E,A
  726. M0506H: IN 01
  727. ANI 10H
  728. CMP E
  729. JZ M0506H
  730. RLC
  731. RLC
  732. RLC
  733. RLC
  734. MOV A,C
  735. RAL
  736. MOV C,A
  737. LDA 0DEF6H
  738. M0518H: DCR A
  739. JNZ M0518H
  740. MOV A,D
  741. ORA A
  742. JP M053AH
  743. MOV A,C
  744. CPI 0E6H
  745. JNZ M052EH
  746. XRA A
  747. STA 0DEF4H
  748. JMP M0538H
  749. M052EH: CPI 19H
  750. JNZ M0501H
  751. MVI A,0FFH
  752. STA 0DEF4H
  753. M0538H: MVI D,09
  754. M053AH: DCR D
  755. JNZ M0501H
  756. LDA 0DEF4H
  757. XRA C
  758. POP D
  759. POP B
  760. RET
  761.  
  762. M0545H: PUSH D ; 4 вызова (при рисовании)
  763. MOV A,L
  764. RLC
  765. RLC
  766. RLC
  767. MOV L,A
  768. MOV A,H
  769. RAR
  770. ANI 70H
  771. MOV D,A
  772. RAR
  773. ADD D
  774. ADD L
  775. ADI 18H
  776. MOV L,A
  777. MOV A,H
  778. ANI 1FH
  779. ADI 0C0H
  780. MOV H,A
  781. POP D
  782. RET
  783.  
  784. ; проверка наличия квазидиска
  785. M055EH: LXI H,0FF00H
  786. SHLD 0DED5H
  787. XRA A
  788. STA 0DED2H
  789. STA 0DED3H
  790. INR A
  791. STA 0DED4H
  792. CALL M0607H
  793. MVI A,00
  794. JNZ M058FH
  795. LXI H,0FF00H
  796. M057AH: PUSH H
  797. LXI D,M0591H
  798. MVI C,0CH
  799. M0580H: LDAX D
  800. CMP M
  801. MVI A,00
  802. JNZ M058EH
  803. INX D
  804. INX H
  805. DCR C
  806. JNZ M0580H
  807. DCR A
  808. M058EH: POP H
  809. M058FH: ORA A
  810. RET
  811.  
  812. ; название файла 'OS COM'
  813. M0591H: .DB 00,4FH,53H,20H,20H,20H,20H,20H,20H,43H,4FH,4DH
  814.  
  815. M059DH: LXI H,M07B2H ; рисунок КВАЗИДИСКА
  816. MVI A,08CH
  817. CALL M06B2H
  818. LXI H,0100H
  819. SHLD 0DED5H
  820. MOV B,H
  821. LXI H,0FF10H
  822. M05AFH: MVI C,10H
  823. M05B1H: MOV A,M
  824. ORA A
  825. JZ M05D6H
  826. CALL M05DDH
  827. MOV A,B
  828. ADI 04
  829. MOV B,A
  830. LDA 0DED2H
  831. ORA A
  832. JNZ M0000H ; переход на начало !!!!!!!!!!!!!!!
  833. INX H
  834. DCR C
  835. JNZ M05B1H
  836. CALL M057AH
  837. JZ M05D6H
  838. LXI D,0010H
  839. DAD D
  840. JMP M05AFH
  841.  
  842. M05D6H: MOV D,B
  843. LXI H,0100H
  844. JMP M0297H
  845.  
  846. M05DDH: PUSH PSW ; 1 вызов (квазидиск)
  847. PUSH H
  848. STA 0DED3H
  849. MVI A,01
  850. M05E4H: STA 0DED4H
  851. PUSH PSW
  852. CALL M0607H
  853. JZ M05F3H
  854. MVI A,0FFH
  855. STA 0DED2H
  856. M05F3H: POP PSW
  857. LHLD 0DED5H
  858. LXI D,0080H
  859. DAD D
  860. SHLD 0DED5H
  861. INR A
  862. CPI 09
  863. JNZ M05E4H
  864. POP H
  865. POP PSW
  866. RET
  867.  
  868. M0607H: PUSH B ; 2 вызов (квазидиск)
  869. PUSH D
  870. LXI H,0000
  871. DAD SP
  872. SHLD 0DED0H
  873. CALL M0641H
  874. DI
  875. OUT 10H
  876. SPHL
  877. LHLD 0DED5H
  878. MVI A,00 ; почему бы не XRA A?
  879. MVI C,20H
  880. M061EH: POP D
  881. ADD E
  882. ADD D
  883. MOV M,E
  884. INX H
  885. MOV M,D
  886. INX H
  887. POP D
  888. ADD E
  889. ADD D
  890. MOV M,E
  891. INX H
  892. MOV M,D
  893. INX H
  894. DCR C
  895. JNZ M061EH
  896. MOV C,A
  897. MVI A,00 ; почему бы не XRA A?
  898. OUT 10H
  899. LHLD 0DED0H
  900. SPHL
  901. EI
  902. MOV A,C
  903. CALL M068CH
  904. POP D
  905. POP B
  906. RET
  907.  
  908. M0641H: LDA 0DED4H ; 1 вызов (квазидиск)
  909. LXI D,0FF80H
  910. LXI H,0400H
  911. M064AH: DAD D
  912. DCR A
  913. JNZ M064AH
  914. XCHG
  915. LDA 0DED3H
  916. CMA
  917. CPI 0FCH
  918. JNC M065BH
  919. SUI 10H
  920. M065BH: SUI 04
  921. MOV L,A
  922. RLC
  923. RLC
  924. ANI 0FCH
  925. MOV H,A
  926. MOV A,L
  927. MVI L,00
  928. DAD D
  929. RLC
  930. RLC
  931. RLC
  932. RLC
  933. ANI 0CH
  934. PUSH B
  935. MOV C,A
  936. MVI A,10H
  937. ORA C
  938. POP B
  939. RET
  940.  
  941. M0674H: LDA 0DED3H ; 1 вызов (квазидиск)
  942. MOV L,A
  943. MVI H,00
  944. DAD H
  945. DAD H
  946. DAD H
  947. DAD H
  948. MVI A,0F0H
  949. ADD H
  950. MOV H,A
  951. LDA 0DED4H
  952. DCR A
  953. ADD A
  954. ADD L
  955. MOV L,A
  956. MVI A,1CH
  957. RET
  958.  
  959. M068CH: PUSH PSW ; 1 вызов (квазидиск)
  960. PUSH D
  961. LXI H,0000
  962. DAD SP
  963. SHLD 0DED0H
  964. CALL M0674H
  965. DI
  966. OUT 10H
  967. SPHL
  968. POP D
  969. MVI A,00 ; почему бы не XRA A?
  970. OUT 10H
  971. LHLD 0DED0H
  972. SPHL
  973. EI
  974. XCHG
  975. POP D
  976. POP PSW
  977. CMP H
  978. JNZ M06AFH
  979. SUB L
  980. RZ
  981. M06AFH: MVI A,0FFH
  982. RET
  983.  
  984. ; вывод рисунка на экран ( в А - количество байт ряда, в HL - адрес )
  985. M06B2H: MVI B,02 ; число рядов
  986. LXI D,0D8E2H ; адрес экранной области
  987. M06B7H: STA 0DCF7H ; сохранить аккумулятор
  988. M06BAH: LDA 0DCF7H ; восстановить аккумулятор
  989. ANI 7FH ; снять старший разряд байта
  990. MOV C,A ; в С из А счетчик байт в ряду
  991. PUSH D ; сохранить адрес экрана
  992. M06C1H: MOV A,M ; читаем в А байт из памяти
  993. STAX D ; запись байта в экранную область
  994. INX D ; переход к следующему адресу экрана
  995. LDA 0DCF7H ; восстановить аккумулятор
  996. ORA A ;
  997. JP M06CEH ; если паритет, то второй раз не выводить
  998. MOV A,M ; читаем в А байт из памяти
  999. STAX D ; запись байта в экранную область
  1000. INX D ; переход к следующему адресу экрана
  1001. M06CEH: INX H ; переход к следующему адресу памяти
  1002. DCR C ; уменьшить счетчик байт в ряду
  1003. JNZ M06C1H ; если не весь ряд записан - опять
  1004. POP D ; восстановить адрес экрана
  1005. INR D ; переход к следующему ряду
  1006. DCR B ; уменьшить счетчик рядов
  1007. JNZ M06BAH ; если не записаны два ряда - опять
  1008. RET
  1009.  
  1010. ; кода надписей и рисунков
  1011. M06DAH: .DB 1FH,39H,60H,0C0H,0CFH,99H,98H,98H,98H,99H,0CFH,0C0H,60H,39H
  1012. .DB 1FH,80H,0C0H,60H,33H,31H,91H,11H,11H,11H,95H,37H,30H,60H,0C0H
  1013. .DB 80H,0C7H,8DH,8CH,8FH,8DH,8DH,0A7H,0E0H,36H,0B6H,36H,0BEH,0BEH
  1014. .DB 0B6H,22H,0,0CDH,0CDH,0EDH,0FDH,0DDH,0CDH,0CDH,0,83H,86H
  1015. .DB 0E6H,0B6H,0B6H,0B6H,0E3H,0,0A7H,0EDH,0E1H,0C3H,0C1H,0EDH,0A7H
  1016. .DB 0,1CH,0B6H,0B6H,36H,0B6H,0B6H,1CH,0,0F1H,0DBH,0DBH,0F1H,0D8H
  1017. .DB 0D9H,0F1H,0,0ECH,99H,35H,6DH,0C1H,0A1H,61H,0C0H,0E3H,0B6H,0B6H
  1018. .DB 86H,86H,0B6H,0B3H,0E0H,99H,0DBH,0DEH,0DCH,0DCH,0DEH,9BH,0,0BBH
  1019. .DB 6DH,6DH,6DH,6DH,6CH,38H,0,0B3H,0B6H,0B6H,0B6H,0B6H,0B6H,73H,0
  1020. .DB 9EH,0DBH,0DBH,0DEH,0DBH,0DBH,9EH,0 ; авторство
  1021. M0760H: .DB 0F3H,0DBH,0DBH,0DBH,0F3H,0DBH,0DBH,0F3H ; ВЕКТОР-06Ц
  1022. .DB 0DBH,1BH,1BH,1AH,9CH,1AH,1BH,0DBH
  1023. .DB 18H,18H,18H,18H,18H,18H,5AH,7EH
  1024. .DB 73H,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,73H
  1025. .DB 0,1,0C1H,6DH,6DH,61H,61H,0C0H
  1026. .DB 0E3H,0B6H,0B6H,0B6H,0B7H,0B6H,0B6H,0E3H
  1027. .DB 83H,0DFH,0D6H,0D6H,96H,16H,0D6H,96H
  1028. M0798H: .DB 3FH,0ABH,0BFH,0C0H,0FFH,0EFH,0C4H,0ECH,0FFH,0FFH,80H,0C0H,7FH
  1029. .DB 0FCH,0D5H,0FDH,3,0FFH,0F7H,23H,37H,0FFH,0FFH,1,3,0FEH ; кассета
  1030. M07B2H: .DB 0FH,0FFH,80H,92H,80H,92H,80H,92H,80H,92H,80H,0FFH ; квазидиск
  1031. .DB 0F0H,0FFH,1,49H,1,49H,1,49H,1,49H,1,0FFH
  1032. M07CAH: .DB 0FFH,0FEH,0FEH,0FFH,0FCH,0FCH,0FFH,81H,81H,0FFH ; дискета
  1033. .DB 0FFH,7FH,7FH,0FFH,3FH,3FH,0FFH,0FEH,0FFH,0FFH
  1034. M07DEH: .DB 55H,0FFH,0C0H,0C7H,0C0H,0FFH,55H ; МППЗУ
  1035. .DB 54H,0FFH,3,0C6H,3,0FFH,54H
  1036. M07ECH: .DB 0C1H,20H,0FH,1,7,0E4H,4,7,20H,0C1H ; адаптер лок. сети
  1037. .DB 83H,4,0F0H,80H,0E0H,27H,20H,0E0H,4,83H
  1038. .END
  1039. ;-------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement