1. /*
  2. Syntax List:
  3. Interrupts:
  4. Interrupt(I); -> Interrupt Number I
  5. NewInt(L,N,W); -> Make Interrupt which does L with interrupt number (N) at W
  6. Freq(V); -> Set frequency **
  7. OUT(B,X,Y,C); -> Turn a Byte(B) into Ascii and print it at X,Y with color C
  8. GOTO(W); -> Jump/Goto W
  9. CCE(A,B,W); -> Compares Byte A with Byte B if equal Calls W **
  10. CCNE(A,B,W); -> Compares Byte A with Byte B if not equal Calls W **
  11. STORE(B); -> Byte B -> Stack **
  12. TAKE(B); -> Stack -> Byte B **
  13. MOV(B,V); -> (V)alue -> Byte B **
  14. BMOV(A,B); -> Byte A = BYTE B **
  15. RAMClear(Min,Max); -> Clear ram from min to max **
  16. NOTE: RAMclear SKIPS screen AND Keyboard, so its actually 0 = 2305
  17. ADD(A,B,W); -> Add Byte A with Byte B into Byte W **
  18. End(); -> Stop program and Draw "End of program" (*) at bottom
  19. Reset(); -> Jump to the start of code
  20. Non Oasm Syntax (Used by THIS to do things):
  21. ClrScr(); -> Clear the Screen *
  22. Print(String,X,Y,Color); -> Print String at X and Y with Color as .. Colour *
  23. Wait(T); -> Wait for T Loops to pass to continue
  24.  
  25. * = Only works if Screen is at first address
  26. ** = Used for Oasm Emulator
  27.  
  28. */
  29.  
  30. #asm
  31. _Start_Of_Program_:
  32.  
  33. DATA;
  34. // Stack Pointer
  35. Alloc _OSP,4096
  36. Alloc _Cmpr,0
  37. Int_Table:; Alloc 512
  38. #endasm
  39.  
  40. Memory2(W,L) int W,L;
  41. /* Direct memory acces with labels */
  42. {
  43. #asm
  44. mov EDX,EBP;
  45. add EDX,2; // L
  46. mov EAX,#EDX;
  47.  
  48. mov EDX,EBP;
  49. add EDX,3; // W
  50. mov EBX,#EDX;
  51.  
  52. Mov ECX,EBX;Add ECX,65536
  53. Mov #ECX,#EAX
  54. #endasm
  55. }
  56.  
  57. DPIXEl(X,Y,C) int X,Y,C;
  58. {
  59. int T;
  60. X = X * 2;
  61. T = 5000; /* T DOES NUTHIN WHEN YOU CHANGE IT */
  62. T = T * 12;
  63. T = T + 5000;
  64. T = T + 536;
  65. T = T + X;
  66. Y = Y * 60;
  67. T = T + Y;
  68. C = C*1000
  69. Memory(T,C);
  70. }
  71.  
  72. Memory(W,V) int W,V;
  73. {
  74. #asm
  75. mov EDX,EBP;
  76. add EDX,2; // V
  77. mov EAX,#EDX;
  78.  
  79. mov EDX,EBP;
  80. add EDX,3; // W
  81. mov EBX,#EDX;
  82.  
  83. Mov ECX,EBX;Add ECX,65536
  84. Mov #ECX,EAX
  85. #endasm
  86. }
  87.  
  88. Call(W)
  89. {
  90. #asm
  91. mov EDX,EBP;
  92. add EDX,2; // W
  93. mov EAX,#EDX;
  94.  
  95. Add ESP,1
  96. Call EAX
  97. #endasm
  98. }
  99.  
  100. CCNE(A,B,W) int A,B,W;
  101. {
  102. #asm
  103. mov EDX,EBP;
  104. add EDX,2; // W
  105. mov EAX,#EDX;
  106.  
  107. mov EDX,EBP;
  108. add EDX,3; // B
  109. mov EBX,#EDX;
  110.  
  111. mov EDX,EBP;
  112. add EDX,4; // A
  113. mov ECX,#EDX;
  114.  
  115. Mov EDX,65536;Add EDX,ECX
  116. Mov ESI,#EDX
  117. Mov EDX,65536;Add EDX,EBX
  118. Mov EDI,#EDX
  119.  
  120. Cmp ESI,EDI;Cne EAX
  121.  
  122. #endasm
  123. }
  124. /* Interrupts */
  125.  
  126. Interrupt(I) int I;
  127. {
  128. #asm
  129.  
  130. mov EDX,EBP;
  131. add EDX,2; // I
  132. mov EAX,#EDX;
  133.  
  134. int EAX
  135. #endasm
  136. }
  137.  
  138. NewInt(L,N,W) int L,N,W;
  139. {
  140. #asm
  141.  
  142. mov EDX,EBP;
  143. add EDX,2; // W
  144. mov EAX,#EDX;
  145.  
  146. mov EDX,EBP;
  147. add EDX,3; // N
  148. mov EBX,#EDX;
  149.  
  150. mov EDX,EBP;
  151. add EDX,4; // L
  152. mov ECX,#EDX;
  153.  
  154. Mul EAX,2
  155.  
  156. stp
  157. Int_SetterUpper:
  158. sti
  159. lidtr Int_Table
  160. mov edi,Int_Table
  161. add edi,64
  162. Add EDI,EAX
  163. Mov #EDI,ECX
  164. Inc EDI
  165. Mov #EDI,EBX
  166.  
  167. #endasm
  168. }
  169.  
  170. Freq(V) int V;
  171. {
  172. #asm
  173. mov EDX,EBP;
  174. add EDX,2; // Value
  175. mov ESI,#EDX;
  176. out 0,ESI
  177. #endasm
  178. }
  179.  
  180. #asm
  181. Alloc X
  182. Alloc Y
  183. Alloc C
  184. Alloc B
  185. #endasm
  186.  
  187. OUT(B,X,Y,C) int B,X,Y,C;
  188. {
  189. #asm
  190.  
  191. mov EDX,EBP;
  192. add EDX,3; // Y
  193. mov #Y,#EDX;
  194.  
  195. mov EDX,EBP;
  196. add EDX,4; // X
  197. mov #X,#EDX;
  198.  
  199. mov EDX,EBP;
  200. add EDX,5; // Byte
  201. mov #B,#EDX;
  202.  
  203. mov EDX,EBP;
  204. add EDX,2; // Colour
  205. mov #C,#EDX;
  206.  
  207.  
  208. Mov EAX,65536;Add EAX,#B
  209. Mov ESI,#EAX
  210. Jmp _Asciinize
  211. _Ascii_Fin:;DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1
  212.  
  213. _AsciiNize:
  214. mov EAX,_Ascii_Fin
  215. mov EDX,10000000 // if you want less digits, remove zeros from this number
  216. mov EBX,ESI
  217. mov ECX,0
  218. fint EBX
  219. div EBX,EDX
  220. div EDX,10
  221. fint EBX
  222. mov ECX,EBX
  223. mul ECX,EDX
  224. add EBX,48
  225. mov #EAX,EBX
  226. inc EAX
  227. jmp Int_loop
  228.  
  229. Int_loop:
  230. mov EBX,ESI
  231. div EBX,EDX
  232. fint EBX
  233. push EBX
  234. sub EBX,ECX
  235. pop ECX
  236. mul ECX,10
  237. add EBX,48
  238. mov #EAX,EBX // Write to DB
  239. inc EAX
  240. div EDX,10
  241. cmp EDX,0.1
  242. je Int_Fin
  243. jmp Int_loop
  244.  
  245. Int_Fin:
  246. Mov EBX,#X;Mul EBX,2
  247. Mov ECX,#Y;Mul ECX,60
  248. Mov ESI,#C
  249. Mov EAX,65536;Add EAX,ECX;Add EAX,EBX
  250. Mov EDI,_Ascii_Fin
  251. Jmp _Print
  252. #endasm
  253. }
  254.  
  255. Ramclear(Min,Max) int Min,Max;
  256. {
  257. #asm
  258. mov EDX,EBP;
  259. add EDX,2; // Max
  260. mov EAX,#EDX;
  261.  
  262. mov EDX,EBP;
  263. add EDX,3; // Min
  264. mov EBX,#EDX;
  265.  
  266. Mov ECX,65536;Add ECX,2048;Add ECX,256;Add ECX,EAX
  267. _Ram_Clear:
  268. Cmp EAX,EBX;Jle _CLEAR_RET
  269. Mov #ECX,0
  270. Dec EAX
  271. Jmp _Ram_Clear
  272. _Clear_Ret:
  273. #endasm
  274. }
  275.  
  276.  
  277.  
  278.  
  279. GOTO(W) int W;
  280. {
  281. #asm
  282. mov EDX,EBP;
  283. add EDX,2; // W
  284. mov EAX,#EDX;
  285.  
  286. Add ESP,1
  287. Jmp EAX
  288. #endasm
  289. }
  290.  
  291. CCE(A,B,W) int A,B,W;
  292. {
  293. #asm
  294. mov EDX,EBP;
  295. add EDX,2; // W
  296. mov EAX,#EDX;
  297.  
  298. mov EDX,EBP;
  299. add EDX,3; // B
  300. mov EBX,#EDX;
  301.  
  302. mov EDX,EBP;
  303. add EDX,4; // A
  304. mov ECX,#EDX;
  305.  
  306. Mov EDX,65536;Add EDX,ECX
  307. Mov ESI,#EDX
  308. Mov EDX,65536;Add EDX,EBX
  309. Mov EDI,#EDX
  310.  
  311. Cmp ESI,EDI;Ce EAX
  312.  
  313. #endasm
  314. }
  315.  
  316. STORE(B) int B;
  317. {
  318. #asm
  319. mov EDX,EBP;
  320. add EDX,2; // B
  321. mov EAX,#EDX;
  322.  
  323. Mov EBX,65536;Add EBX,EAX
  324. Mov ECX,#EBX
  325. Mov EBX,65536;Add EBX,#_OSP
  326. Mov #EBX,ECX;Dec #_OSP
  327. #endasm
  328. }
  329.  
  330. /* Not finished */
  331.  
  332. TAKE(B) int B;
  333. {
  334. #asm
  335.  
  336. mov EDX,EBP;
  337. add EDX,2; // B
  338. mov EAX,#EDX;
  339.  
  340. Mov EBX,65536;Add EBX,EAX
  341. Mov ECX,#EBX
  342. Mov EBX,65536;Add EBX,#_OSP
  343. Inc EBX;Inc #_OSP
  344. Mov EDX,#EBX
  345. Mov EBX,ECX;Mov #EBX,EDX
  346. #endasm
  347. }
  348.  
  349. BMOV(A,B) int A,B;
  350. {
  351. #asm
  352. mov EDX,EBP;
  353. add EDX,2; // B
  354. mov EAX,#EDX;
  355.  
  356. mov EDX,EBP;
  357. add EDX,3; // A
  358. mov EBX,#EDX;
  359.  
  360. Mov ECX,65536;Add ECX,EAX
  361. Mov ESI,ECX
  362. Mov ECX,65536;Add ECX,EBX
  363. Mov EDI,ECX
  364.  
  365. Mov #ESI,#EDI
  366.  
  367. #endasm
  368. }
  369.  
  370. MOV(W,V) int W,V; /* Move Value into Byte W */
  371. {
  372. #asm
  373.  
  374. mov EDX,EBP;
  375. add EDX,2; // V
  376. mov EAX,#EDX;
  377.  
  378. mov EDX,EBP;
  379. add EDX,3; // W
  380. mov EBX,#EDX;
  381.  
  382. Cmp EBX,4096;Jg _HW
  383. Cmp EBX,0;Jl _LW
  384. Cmp EAX,2147483647;Jg _HV
  385. Cmp EAX,-2147483647;Jl _LV
  386. // Check Values
  387. Mov ECX,65536;Add ECX,EBX
  388. Mov #ECX,EAX
  389. // Save to Byte X
  390. #endasm
  391. }
  392.  
  393. ADD(A,B,W) int A,B,W; /* Add 2 Bytes into Byte W */
  394. {
  395. #asm
  396.  
  397. mov EDX,EBP;
  398. add EDX,2; // W
  399. mov EAX,#EDX;
  400.  
  401. mov EDX,EBP;
  402. add EDX,3; // B
  403. mov EBX,#EDX;
  404.  
  405. mov EDX,EBP;
  406. add EDX,4; // A
  407. mov ECX,#EDX;
  408.  
  409. // Get Values
  410.  
  411. Mov EDX,65536;Add EDX,EBX // B
  412. Mov ESI,#EAX
  413. // Store B Into ESI
  414. Mov EDX,65536;Add EDX,ECX // A
  415. Mov EDI,#EAX
  416. // Store A Into EDI
  417. Add ESI,EDI
  418. // Add them
  419. Mov EDX,EAX;Add EDX,65536
  420. Mov #EDX,ESI
  421. // Store them into Byte W + 65536
  422. // Save to Byte
  423.  
  424. #endasm
  425. }
  426.  
  427. HW() /* High Byte */
  428. {
  429.  
  430. ClrScr();
  431. Print("Inaccessible Byte",0,0,999);
  432. Print("Too High",0,0,999);
  433. End();
  434.  
  435. }
  436.  
  437. LW() /* Low Byte */
  438. {
  439. ClrScr
  440. Print("Inaccessible Byte",0,0,999);
  441. Print("Too Low",0,0,999);
  442. End();
  443. }
  444.  
  445. HV() /* High Value */
  446. {
  447. ClrScr();
  448. Print("Too High Value",0,0,999);
  449. Print("Max Value: 2147483647",0,1,999);
  450. End();
  451. }
  452.  
  453. LV() /* Low Value */
  454. {
  455. ClrScr();
  456. Print("Too Low Value",0,0,999);
  457. Print("Min Value: -2147483647",0,1,999);
  458. End();
  459. }
  460.  
  461. Reset()
  462. {
  463. #asm
  464. Jmp _Start_Of_Program_
  465. #endasm
  466. }
  467. /*
  468. End()
  469. {
  470. Print("End of Program",0,17,999);
  471. #asm
  472. _End_:
  473. Jmp _End_
  474. #endasm
  475. }
  476. */
  477.  
  478.  
  479. End() /* End program C style */
  480. {
  481. Print("End of Program",0,17,999);
  482. Goto(End);
  483. }
  484.  
  485.  
  486. ClrScr() /* Clear Screen */
  487. {
  488. #asm
  489. Mov EAX,65536;Add EAX,2041
  490. Mov #EAX,1
  491. Mov #EAX,0
  492. #endasm
  493. }
  494.  
  495.  
  496. Print(String,X,Y,Color) char *string; int X,Y,Color; /* Print Text */
  497. {
  498. #asm
  499. mov EDX,EBP;
  500. add EDX,2; // Colour
  501. mov ESI,#EDX;
  502.  
  503. mov EDX,EBP;
  504. add EDX,3; // Y
  505. mov EBX,#EDX;
  506.  
  507. mov EDX,EBP;
  508. add EDX,4; // X
  509. mov ECX,#EDX;
  510.  
  511. mov EDX,EBP;
  512. add EDX,5; // String
  513. mov EDI,#EDX;
  514.  
  515. Mov EAX,65536
  516. Mul ECX,2
  517. Mul EBX,60
  518. Add EAX,EBX;Add EAX,ECX
  519.  
  520. Print_:
  521. Cmp #EDI,0
  522. Je _PRET
  523. Mov #EAX,#EDI
  524. Inc EAX
  525. Mov #EAX,ESI
  526. Inc EAX
  527. Inc EDI
  528. Jmp Print_
  529. _PRET:
  530. #endasm
  531. }
  532.  
  533. Wait(T) int T;
  534. {
  535. #asm
  536. mov EDX,EBP;
  537. add EDX,2; // T
  538. mov EAX,#EDX;
  539.  
  540. Wait_Loop:
  541. Cmp EAX,0;Jle Wait_Ret
  542. Dec EAX
  543. Jmp Wait_Loop
  544. Wait_Ret:
  545. Mov EAX,0
  546. #endasm
  547. }
  548.  
  549. #asm
  550. CODE;
  551. #endasm
  552.  
  553. Init()
  554. {
  555. ClrScr();
  556. Print("Initializing Oasm",0,0,999);
  557. Print("Reading Code",0,1,999);
  558. Wait(100); /* Yes, It actually does nothing :V */
  559. Print("Setting Up Variables",0,2,999);
  560. Print("Oasm: Overv Emulator",0,3,999);
  561. Print("4096 Byte",0,4,999);
  562. Print("Code Output:",0,5,999);
  563. #asm
  564. Jmp _Main
  565. #endasm
  566. }
  567. /* Code continues on HERE */