editor.asm 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. .286
  2. .model small
  3. .code
  4. org 100h
  5. start:
  6. call INIT
  7. mov ax, 1
  8. int 33h
  9. newl:
  10. mov ah, 06h
  11. mov dl, 0ffh
  12. int 21h
  13. jnz OVER
  14. mov ax, 3
  15. int 33h
  16. test bx, 2
  17. jz dal
  18. call ShowMenu
  19. dal:
  20. test bx,1
  21. jz newl
  22. mov di, dx
  23. shl di, 8
  24. shl dx, 6
  25. add di, dx
  26. shr cx, 1
  27. add di, cx
  28. mov ax, 2
  29. int 33h
  30. mov ah, curcol
  31. mov es:[di], ah
  32. mov ax, 1
  33. int 33h
  34. jmp newl
  35. over:
  36. mov ax, 3h
  37. int 10h
  38. ;---------------------
  39. int 20h ; All OVER!
  40. ;---------------------
  41. ;
  42. ;
  43. INIT proc near
  44. pusha
  45. mov ax, 13h
  46. int 10h
  47. mov ax, 0a000h
  48. mov es, ax
  49. mov ax, 0
  50. int 33h
  51. popa
  52. ret
  53. endp
  54. DrawPal proc near
  55. pusha
  56. mov buttonPr, 0
  57. mov ax, 02
  58. int 33h
  59. mov di, 0
  60. mov ah, 0
  61. mov cx, 16
  62. biglp: push cx
  63. mov cx, 10
  64. smalp: push cx
  65. mov al, ah
  66. mov cx, 16
  67. ano: push cx
  68. mov cx, 10
  69. repe stosb
  70. pop cx
  71. inc al
  72. loop ano
  73. pop cx
  74. add di, 160
  75. loop SmaLp
  76. pop cx
  77. add ah, 10h
  78. loop biglp
  79. mov ax, 01
  80. int 33h
  81. ; setMOusePos
  82. mov ax, 4
  83. mov cx, 0
  84. mov dx, 0
  85. int 33h
  86. ; SetMouseBounds
  87. mov ax, 7
  88. mov cx, 0
  89. mov dx, 140h
  90. int 33h
  91. mov ax, 8
  92. mov cx, 0
  93. mov dx, 0a0h
  94. int 33h
  95. colsel: mov ax, 03
  96. int 33h
  97. test bx, 1
  98. jz blah3
  99. mov buttonPr, 1
  100. jmp COLsel
  101. blah3: cmp ButtonPr, 1
  102. jne COLsel
  103. mov ax, dx
  104. xor dx, dx
  105. mov bx, 10
  106. div bx
  107. shl ax, 4
  108. mov di, ax
  109. mov ax, cx
  110. mov bx, 20
  111. xor dx, dx
  112. div bx
  113. add di, ax
  114. mov ax, di
  115. mov curcol, al ; Save new color
  116. mov ax, 7
  117. mov cx, 0
  118. mov dx, 280h
  119. int 33h
  120. mov ax, 8
  121. mov cx, 0
  122. mov dx, 0c8h
  123. int 33h
  124. popa
  125. ret
  126. endp
  127. ;
  128. SaveBuf proc near
  129. pusha
  130. push es
  131. push ds
  132. push es
  133. pop ds
  134. push cs
  135. pop es
  136. mov di, offset PalTabl
  137. mov si, 0
  138. mov cx, 0A0h
  139. lp1: push cx
  140. mov cx, 0a0h
  141. repe movsb
  142. pop cx
  143. add si, 0a0h
  144. loop lp1
  145. pop ds
  146. pop es
  147. popa
  148. ret
  149. endp
  150. ;
  151. ;
  152. LoadBuf proc near
  153. pusha
  154. mov di, 0
  155. push cs
  156. pop ds
  157. mov si, offset PalTabl
  158. mov cx, 0A0h
  159. lp2: push cx
  160. mov cx, 0a0h
  161. repe movsb
  162. pop cx
  163. add di, 0a0h
  164. loop lp2
  165. popa
  166. ret
  167. endp
  168. ;
  169. ShowMenu proc near
  170. pusha
  171. mov buttonPr, 0
  172. mov ax, 1130h
  173. mov bh, 06h
  174. int 10h
  175. mov FontSeg, es
  176. mov FontOffs, bp
  177. mov ax, 02
  178. int 33h
  179. mov ax, 0a000h
  180. mov es, ax
  181. call SaveBuf
  182. mov di, 0
  183. mov ax, 20
  184. mov cx, 0a0h
  185. lp3: push cx
  186. mov cx, 0a0h
  187. repe stosb
  188. pop cx
  189. add di, 0a0h
  190. loop lp3
  191. mov di, 320*31
  192. mov ax, 4
  193. mov cx, 4
  194. lp4: push cx
  195. mov cx, 160
  196. repe stosb
  197. pop cx
  198. add di, 320*31-160
  199. loop lp4
  200. push 0
  201. push 5
  202. call DrawMenuLine
  203. push 1
  204. push 3
  205. call DrawMenuLine
  206. push 2
  207. push 3
  208. call DrawMenuLine
  209. push 3
  210. push 3
  211. call DrawMenuLine
  212. push 4
  213. push 3
  214. call DrawMenuLine
  215. mov ax, 01
  216. int 33h
  217. ; setMOusePos
  218. mov ax, 4
  219. mov cx, 0
  220. mov dx, 0
  221. int 33h
  222. ; SetMouseBounds
  223. mov ax, 7
  224. mov cx, 0
  225. mov dx, 140h
  226. int 33h
  227. mov ax, 8
  228. mov cx, 0
  229. mov dx, 0a0h
  230. int 33h
  231. MENUsel:mov ax, 03
  232. int 33h
  233. shr dx, 5
  234. cmp dx, curline
  235. je blah
  236. push dx
  237. mov ax, 02
  238. int 33h
  239. push curline
  240. push 3
  241. call DrawMenuLine
  242. pop dx
  243. mov curline, dx
  244. push curline
  245. push 5
  246. call DrawMenuLine
  247. mov ax, 01
  248. int 33h
  249. jmp menusel
  250. blah: test bx, 1
  251. jz blah2
  252. mov buttonPr, 1
  253. jmp MENUsel
  254. blah2: cmp ButtonPr, 1
  255. jne MENUsel
  256. cmp curline, 0
  257. jne menu1
  258. mov ax, 02
  259. int 33h
  260. push offset RodName
  261. call Load
  262. mov ax, 7
  263. mov cx, 0
  264. mov dx, 280h
  265. int 33h
  266. mov ax, 8
  267. mov cx, 0
  268. mov dx, 0c8h
  269. int 33h
  270. mov ax, 01
  271. int 33h
  272. popa
  273. ret
  274. menu1: cmp curline, 1
  275. jne menu2
  276. mov ax, 02
  277. int 33h
  278. call LoadBuf
  279. push offset RodName
  280. call save
  281. mov ax, 7
  282. mov cx, 0
  283. mov dx, 280h
  284. int 33h
  285. mov ax, 8
  286. mov cx, 0
  287. mov dx, 0c8h
  288. int 33h
  289. mov ax, 01
  290. int 33h
  291. popa
  292. ret
  293. menu2: cmp curline, 2
  294. jne menu3
  295. call DrawPal
  296. jmp menuend
  297. menu3: cmp curline, 3
  298. jne menuend
  299. jmp over
  300. ;tablend
  301. MENuend:
  302. mov ax, 02
  303. int 33h
  304. call LoadBuf
  305. mov ax, 7
  306. mov cx, 0
  307. mov dx, 280h
  308. int 33h
  309. mov ax, 8
  310. mov cx, 0
  311. mov dx, 0c8h
  312. int 33h
  313. mov ax, 01
  314. int 33h
  315. popa
  316. ret
  317. endp
  318. ;
  319. ;---------------------------------------------
  320. OutCharXY proc near ;OutCharXY(X,Y,Char,Color,bg,TableOffs,TableSeg)
  321. push bp
  322. mov bp, sp
  323. TableSeg equ word ptr [bp+4]
  324. TableOffs equ word ptr [bp+6]
  325. Color equ byte ptr [bp+10]
  326. Bg equ byte ptr [bp+8]
  327. Char equ byte ptr [bp+12]
  328. posY equ word ptr [bp+14]
  329. posX equ word ptr [bp+16]
  330. pusha
  331. push es
  332. ;----------------------------
  333. ; Character Creation
  334. mov di, TableOffs
  335. mov es, TableSeg
  336. mov ah, 0
  337. mov al, Char
  338. shl ax, 4
  339. add di, ax
  340. mov cx, 16
  341. mov si, offset face
  342. MainLoop:
  343. mov bh, es:di
  344. push cx
  345. mov cx, 8
  346. LineLoop:
  347. test bh, 80h
  348. jz BackGround
  349. mov ah, Color
  350. mov byte ptr ds:[si], ah
  351. jmp LoopEnd
  352. BackGround:
  353. mov ah, Bg
  354. mov byte ptr ds:[si], ah
  355. LoopEnd:
  356. shl bh, 1
  357. inc si
  358. loop LineLoop
  359. pop cx
  360. inc di
  361. loop MainLoop
  362. ; End of Character creation
  363. ;=======================================
  364. mov ax, posX
  365. push ax ; X position
  366. mov ax, posY
  367. push ax ; Y position
  368. push offset face ; Character bitmap
  369. push 8 ; SizeX
  370. push 16 ; SizeY
  371. call WriteSprite ; WriteChar
  372. pop es
  373. popa
  374. pop bp
  375. ret 14
  376. endp
  377. ;-------------------------------------------
  378. WriteSprite proc near ;writesprite(x,y,char *sprt,razmx,razmy)
  379. push bp
  380. mov bp,sp
  381. razmy equ word ptr [bp+4]
  382. razmx equ word ptr [bp+6]
  383. sprt equ word ptr [bp+8]
  384. posy equ word ptr [bp+10]
  385. posx equ word ptr [bp+12]
  386. pusha
  387. push es
  388. mov ax, 0A000h
  389. mov es, ax
  390. mov ax, posy
  391. mov bx, ax
  392. shl ax, 8
  393. shl bx, 6
  394. add ax, bx
  395. add ax, posx
  396. mov di, ax
  397. mov ax, sprt
  398. mov si, ax
  399. mov cx, razmy
  400. lup:
  401. push cx
  402. mov cx, razmx
  403. repe movsb
  404. add di, 320
  405. sub di,razmx
  406. pop cx
  407. loop lup
  408. pop es
  409. popa
  410. pop bp
  411. ret 10
  412. endp
  413. DrawMenuLine proc near ;DrawMenuLine(int Linenum,int color);
  414. push bp
  415. mov bp, sp
  416. Color4 EQU word ptr [bp+4]
  417. linenum EQU byte ptr [bp+6]
  418. pusha
  419. cmp linenum, 0
  420. jne tst2
  421. push 64
  422. push 8
  423. push offset line1
  424. push color4
  425. push 20
  426. push FontOffs
  427. push FontSeg
  428. call OutTextXY
  429. jmp fend
  430. tst2: cmp linenum, 1
  431. jne tst3
  432. push 64
  433. push 40
  434. push offset line2
  435. push color4
  436. push 20
  437. push FontOffs
  438. push FontSeg
  439. call OutTextXY
  440. jmp fend
  441. tst3: cmp linenum, 2
  442. jne tst4
  443. push 60
  444. push 72
  445. push offset line3
  446. push color4
  447. push 20
  448. push FontOffs
  449. push FontSeg
  450. call OutTextXY
  451. jmp fend
  452. tst4: cmp linenum, 3
  453. jne tst5
  454. push 64
  455. push 104
  456. push offset line4
  457. push color4
  458. push 20
  459. push FontOffs
  460. push FontSeg
  461. call OutTextXY
  462. jmp fend
  463. tst5: push 64
  464. push 136
  465. push offset line5
  466. push color4
  467. push 20
  468. push FontOffs
  469. push FontSeg
  470. call OutTextXY
  471. fend:
  472. popa
  473. pop bp
  474. ret 4
  475. endp
  476. OutTextXY proc near
  477. push bp
  478. mov bp, sp
  479. TableSeg2 equ word ptr [bp+4]
  480. TableOffs2 equ word ptr [bp+6]
  481. Color2 equ word ptr [bp+10]
  482. Bg2 equ word ptr [bp+8]
  483. String equ word ptr [bp+12]
  484. posY2 equ word ptr [bp+14]
  485. posX2 equ word ptr [bp+16]
  486. pusha
  487. push es
  488. mov ax, posx2
  489. mov di, String
  490. drlp: cmp byte ptr cs:[di], 0
  491. je drend
  492. push ax
  493. push posy2
  494. mov bl, cs:[di]
  495. mov bh, 0
  496. push bx
  497. push color2
  498. push bg2
  499. push tableoffs2
  500. push tableseg2
  501. call outcharxy
  502. add ax, 8
  503. inc di
  504. jmp drlp
  505. drend:
  506. pop es
  507. popa
  508. pop bp
  509. ret 14
  510. endp
  511. Save proc near
  512. push bp
  513. mov bp, sp
  514. SFN EQU word ptr [bp+4]
  515. pusha
  516. push es
  517. mov ah, 3ch
  518. mov cx, 0
  519. mov dx, SFN
  520. int 21h
  521. jc mend
  522. mov bx, ax
  523. mov ah, 40h
  524. mov dx, offset buf
  525. mov cx, 6
  526. int 21h
  527. mov cx, 100h
  528. mov dx, 3c7h
  529. mov al, 0
  530. out dx, al
  531. mov di, offset buf
  532. pallp: push cx
  533. mov dx, 3c9h
  534. in al, dx
  535. mov di[0], al
  536. in al, dx
  537. mov di[1], al
  538. in al, dx
  539. mov di[2], al
  540. mov dx, di
  541. mov ah, 40h
  542. mov cx, 3
  543. int 21h
  544. pop cx
  545. loop pallp
  546. push ds
  547. push es
  548. pop ds
  549. mov ah, 40h
  550. mov dx, 0
  551. mov cx, 0fA00h
  552. int 21h
  553. pop ds
  554. mov ah, 3eh
  555. int 21h
  556. mend:
  557. pop es
  558. popa
  559. pop bp
  560. ret 2
  561. buf db 'RODGfx'
  562. endp
  563. Load proc near
  564. push bp
  565. mov bp, sp
  566. LFN EQU word ptr [bp+4]
  567. pusha
  568. push es
  569. mov ax, 3d00h
  570. mov dx, LFN
  571. int 21h
  572. jc mend2
  573. mov bx, ax
  574. mov ah, 3fh
  575. mov dx, offset buf
  576. mov cx, 6
  577. int 21h
  578. mov cx, 100h
  579. mov dx, 3c8h
  580. mov al, 0
  581. out dx, al
  582. mov di, offset buf2
  583. pallp2: push cx
  584. mov dx, di
  585. mov ah, 3fh
  586. mov cx, 3
  587. int 21h
  588. mov dx, 3c9h
  589. mov al, di[0]
  590. out dx, al
  591. mov al, di[1]
  592. out dx, al
  593. mov al, di[2]
  594. out dx, al
  595. pop cx
  596. loop pallp2
  597. push ds
  598. push es
  599. pop ds
  600. mov ah, 3fh
  601. mov dx, 0
  602. mov cx, 0fA00h
  603. int 21h
  604. pop ds
  605. mov ah, 3eh
  606. int 21h
  607. mend2:
  608. pop es
  609. popa
  610. pop bp
  611. ret 2
  612. buf2 db 6 dup (?)
  613. endp
  614. face db 128 dup (?)
  615. FontOffs dw ?
  616. FontSeg dw ?
  617. curcol db 4
  618. Line1 db 'Load',0
  619. Line2 db 'Save',0
  620. Line3 db 'Color',0
  621. Line4 db 'Quit',0
  622. Line5 db 'Back',0
  623. curline dw 0
  624. buttonPr db 0
  625. RodName db 'rod.pic',0
  626. PalTabl db 6400h dup (?)
  627. end start