10.07.2015 Views

Uncompressed - The Tech Heap

Uncompressed - The Tech Heap

Uncompressed - The Tech Heap

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

EXTENDED BASIC UNRAVELLED IIAPPENDIX BDISASSEMBLY OF EXTENDED BASIC 1.1ORIGIN:SPECTRAL ASSOCREVISED:12/26/1999 WALTER K ZYDHEK4225 9EF4 34 06 PSHS B,A SAVE START POINT4226 9EF6 BD 9F E2 JSR L9FE2 EVALUATE CIRCLE END POINT (OCTANT, SUBARC)4227 9EF9 DD D9 STD VD9 SAVE END POINT4228 9EFB 35 06 PULS A,B GET START POINT4229 9EFD 34 06 L9EFD PSHS B,A STORE CURRENT CIRCLE POSITION4230 9EFF 9E C3 LDX HOREND * MOVE HOR, VER COORDS FROM HOREND,VEREND TO4231 9F01 9F BD STX HORBEG * HORBEG, VERBEG R MOVE OLD END COORDINATES4232 9F03 9E C5 LDX VEREND * NEW START COORDINATES4233 9F05 9F BF STX VERBEG *4234 9F07 CE 9E 7B LDU #L9E79+2 POINT TO TABLE OF SINES & COSINES4235 9F0A 84 01 ANDA #$01 =GET OCTANT NUMBER4236 9F0C 27 03 BEQ L9F11 =BRANCH IF EVEN4237 9F0E 50 NEGB *4238 9F0F CB 08 ADDB #$08 *CONVERT 0-7 TO 8-1 FOR ODD OCTANT NUMBERS4239 9F11 58 L9F11 ASLB =4240 9F12 58 ASLB =FOUR BYTES/TABLE ENTRY4241 9F13 33 C5 LEAU B,U POINT U TO CORRECT TABLE ENTRY4242 9F15 34 40 PSHS U SAVE SIN/COS TABLE ENTRY4243 9F17 BD 9F A7 JSR L9FA7 CALCULATE HORIZ OFFSET4244 9F1A 35 40 PULS U GET SIN/COS TABLE PTR4245 9F1C 33 5E LEAU $-02,U MOVE TO COSINE (VERT)4246 9F1E 34 10 PSHS X SAVE HORIZ OFFSET4247 9F20 BD 9F A7 JSR L9FA7 CALCULATE VERT OFFSET4248 9F23 35 20 PULS Y PUT HORIZ OFFSET IN Y4249 9F25 A6 E4 LDA ,S *4250 9F27 84 03 ANDA #$03 *4251 9F29 27 06 BEQ L9F31 *BRANCH IF OCTANT 0,3,4,74252 9F2B 81 03 CMPA #$03 *4253 9F2D 27 02 BEQ L9F31 *BRANCH IF OCTANT 0,3,4,74254 9F2F 1E 12 EXG X,Y SWAP HOR AND VERT OFFSETS4255 9F31 9F C3 L9F31 STX HOREND SAVE HORIZ OFFSET4256 * THE HW RATIO WILL ONLY MODIFY THE VERT COORD4257 9F33 1F 21 TFR Y,X LOAD X WITH THE CALCULATED VERT OFFSET4258 9F35 DC D1 LDD VD1 GET HW RATIO4259 > 9F37 BD 9F B5 JSR L9FB5 MULT VERT OFFSET BY HW RATIO4260 9F3A 1F 20 TFR Y,D TRANSFER THE PRODUCT TO ACCD4261 9F3C 4D TSTA CHECK OVERFLOW FLAG AND GET MSB RESULT4262 9F3D 10 26 15 09 LBNE LB44A ‘FC’ ERROR IF RESULT > 2554263 9F41 D7 C5 STB VEREND SAVE DELTA VER MBS4264 9F43 1F 30 TFR U,D LSB RESULT TO ACCA4265 9F45 97 C6 STA VEREND+1 SAVE DELTA VER LSB4266 9F47 A6 E4 LDA ,S *4267 9F49 81 02 CMPA #$02 * BRANCH IF OCTANT = 0,1,6,7 (SUBARC HOR END4268 9F4B 25 0E BLO L9F5B * POINT >= HOR CENTER)4269 9F4D 81 06 CMPA #$06 = BRANCH IF OCTANT = 0,1,6,7 (SUSARC HOR END4270 9F4F 24 0A BCC L9F5B = POINT >= HOR CENTER)4271 9F51 DC CB LDD VCB GET HOR COORD OF CENTER4272 9F53 93 C3 SUBD HOREND SUBTRACT HORIZONTAL DIFFERENCE4273 9F55 24 11 BCC L9F68 BRANCH IF NO UNDERFLOW4274 9F57 4F CLRA *4275 9F58 5F CLRB * IF NEW HOR < 0, FORCE IT TO BE 04276 9F59 20 0D BRA L9F68 SAVE NEW COORD4277 9F5B DC CB L9F5B LDD VCB GET HOR COORD OF CENTER4278 9F5D D3 C3 ADDD HOREND ADD HORIZONTAL DIFFERENCE4279 9F5F 25 05 BLO L9F66 BRANCH IF OVERFLOW4280 9F61 10 93 D3 CMPD VD3 COMPARE TO MAX HOR COORD4281 9F64 25 02 BLO L9F68 BRANCH IF < MAX HOR4282 9F66 DC D3 L9F66 LDD VD3 GET MAX HOR COORD4283 9F68 DD C3 L9F68 STD HOREND SAVE NEW HORIZ SU8ARC END COORD4284 9F6A A6 E4 LDA ,S *4285 9F6C 81 04 CMPA #$04 * BRANCH IF OCTANT = 0,1,2,3 (SUBARC VERT END4286 9F6E 25 0A BLO L9F7A * POINT >= VERT CENTER)4287 9F70 DC CD LDD VCD GET VER COORD OF CENTER4288 9F72 93 C5 SUBD VEREND SUBTRACT VERTICAL DIFFERENCE4289 9F74 24 11 BCC L9F87 BRANCH IF NO UNDERFIOW4290 9F76 4F CLRA *4291 9F77 5F CLRB *IF NEW VERT < 0, FORCE IT TO BE 04292 9F78 20 0D BRA L9F87 SAVE NEW COORD4293 9F7A DC CD L9F7A LDD VCD GET VER COORD OF CENTER4294 9F7C D3 C5 ADDD VEREND ADD VERTICAL DIFFERENCE4295 9F7E 25 05 BLO L9F85 BRANCH IF OVERFLOW4296 9F80 10 93 D5 CMPD VD5 COMPARE TO MAX VERT COORD4297 9F83 25 02 BLO L9F87 BRANCH IF < MAX VER4298 9F85 DC D5 L9F85 LDD VD5 GET MAX VERT COORD4299 9F87 DD C5 L9F87 STD VEREND SAVE NEW VERT SUSARC END COORD4300 9F89 0D D8 TST VD8 CHECK FIRST TIME FLAG4301 9F8B 26 02 BNE L9F8F *DO NOT DRAW A LINE FIRST TIME THRU -4302 * *BECAUSE THE FIRST TIME YOU WOULD DRAW A LINE4303 * *FROM THE CENTER TO THE FIRST POINT ON THE CIRCLE4304 9F8D 8D 50 BSR L9FDF DRAW A LINE4305 9F8F 35 06 L9F8F PULS A,B GET END COORDS4306 9F91 04 D8 LSR VD8 SHIFT FIRST TIME FLAG4307 9F93 25 05 BLO L9F9A DO NOT CHECK FOR END POINT AFTER DRAWING FIRST ARC4308 9F95 10 93 D9 CMPD VD9 COMPARE CURRENT POSITION TO END POINT4309 9F98 27 0C BEQ L9FA6 CIRCLE DRAWING FINISHED4310 * INCREMENT SUBARC CTR, IF > 7 THEN INCR OCTANT CTR4311 9F9A 5C L9F9A INCB INCR SUBARC CTR4312 9F9B C1 08 CMPB #$08 > 7?4313 9F9D 26 04 BNE L9FA3 NO4314 9F9F 4C INCA INCR OCTANT CTR4315 9FA0 5F CLRB RESET SUBARC CTR4316 9FA1 84 07 ANDA #$07 *KEEP IN RANGE OF 0-7; ONCE ACCA = B, THIS WILL MAKE ACCA = 0,4317 * *SO THE END POINT WILL BE (0,0) AND THE CIRCLE ROUTINE WILL END.4318 9FA3 7E 9E FD L9FA3 JMP L9EFD KEEP DRAWING CIRCLE4319 9FA6 39 L9FA6 RTS EXIT CIRCLE ROUTINE4320 * MULTIPLY RADIUS BY SIN/COS VALUE AND RETURN OFFSET IN XB45

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!