Mercurial > public > mk2
comparison code_part1/OSTC_code_asm_part1/aa_wordprocessor.asm @ 706:d68c6a6b1f38
aa fonts processor
author | heinrichsweikamp |
---|---|
date | Tue, 16 Apr 2013 15:40:27 +0200 |
parents | 55983c4d6b2d |
children | f32b9ad6244c |
comparison
equal
deleted
inserted
replaced
705:55983c4d6b2d | 706:d68c6a6b1f38 |
---|---|
333 | 333 |
334 movff aa_temp+0,PRODH ; Add color/2 if bit set. | 334 movff aa_temp+0,PRODH ; Add color/2 if bit set. |
335 movff aa_temp+1,PRODL ; DISPLAY is big endian, so swap here. | 335 movff aa_temp+1,PRODL ; DISPLAY is big endian, so swap here. |
336 aa_decode_12: | 336 aa_decode_12: |
337 btfss aa_color_quart,ACCESS | 337 btfss aa_color_quart,ACCESS |
338 bra aa_decode_3 | 338 bra aa_decode_12b |
339 | 339 |
340 ; Divide it once again by 2. Max red = 7/31. | 340 ; Divide it once again by 2. Max red = 7/31. |
341 rrcf aa_temp+0,W,ACCESS ; xxRRRxxG | 341 rrcf aa_temp+0,W,ACCESS ; xxRRRxxG |
342 andlw b'00111001' ; 00RRR00G (don't change C) | 342 andlw b'00111001' ; 00RRR00G (don't change C) |
343 movwf aa_temp+0,ACCESS | 343 movwf aa_temp+0,ACCESS |
348 movf aa_temp+1,W,ACCESS ; Add color/4 | 348 movf aa_temp+1,W,ACCESS ; Add color/4 |
349 addwf PRODL,F ; NOTE: 7/31+15/31=22/31, | 349 addwf PRODL,F ; NOTE: 7/31+15/31=22/31, |
350 movf aa_temp+0,W,ACCESS ; hence composants won't overlap. | 350 movf aa_temp+0,W,ACCESS ; hence composants won't overlap. |
351 addwfc PRODH,F ; In right order, to propagate carry. | 351 addwfc PRODH,F ; In right order, to propagate carry. |
352 | 352 |
353 aa_decode_12b: | |
353 movff win_flags,WREG ; BEWARE: bank0 bit-test | 354 movff win_flags,WREG ; BEWARE: bank0 bit-test |
354 btfss WREG,1 ; Display1? | 355 btfss WREG,1 ; Display1? |
355 bra aa_decode_3 ; No, Done. | 356 bra aa_decode_3 ; No, Done. |
356 | 357 |
357 ; Convert 16Bit RGB b'RRRRRGGG GGGBBBBB' into 24Bit RGB b'00RRRRRR 00GGGGGG 00BBBBBB' | 358 ; Convert 16Bit RGB b'RRRRRGGG GGGBBBBB' into 24Bit RGB b'RRRRRR00 GGGGGG00 BBBBBB00' |
359 ; PRODH PRODL win_color4 win_color5 win_color6 | |
358 ; Blue | 360 ; Blue |
359 movff PRODH,win_color3 | 361 movff PRODL,win_color6 |
360 bcf STATUS,C | 362 bcf STATUS,C |
361 rlcf win_color3,F ; = U0BBBBB0 | 363 rlcf win_color6,F ; = UUBBBBB0 |
362 bcf win_color3,7 ; = 00BBBBB0 | 364 bcf STATUS,C |
365 rlcf win_color6,F ; = UBBBBB00 | |
366 bcf STATUS,C | |
367 rlcf win_color6,F ; = BBBBB000 | |
368 btfsc win_color6,7 | |
369 bsf win_color6,2 | |
370 | |
363 ; Green | 371 ; Green |
372 rrcf PRODH,F | |
364 rrcf PRODL,F | 373 rrcf PRODL,F |
365 rrcf PRODH,F | 374 rrcf PRODH,F |
366 rrcf PRODL,F | 375 rrcf PRODL,F |
367 rrcf PRODH,F | 376 rrcf PRODH,F ; = UUURRRRR |
368 rrcf PRODL,F ; = UUURRRRR | 377 rrcf PRODL,F ; = GGGGGGUU |
369 rrcf PRODH,F ; = GGGGGGUU | 378 bcf PRODL,1 ; = GGGGGG0U |
370 bcf STATUS,C | 379 bcf PRODL,0 ; = GGGGGG00 |
371 rrcf PRODH,F ; = 0GGGGGGU | 380 movff PRODL,win_color5 |
372 bcf STATUS,C | 381 |
373 rrcf PRODH,F ; = 00GGGGGG | |
374 ; Red | 382 ; Red |
375 bcf STATUS,C | 383 bcf STATUS,C |
376 rlcf PRODL,F ; = UURRRRR0 | 384 rlcf PRODH,F ; = UURRRRR0 |
377 bcf PRODL,6 ; = U0RRRRR0 | 385 bcf STATUS,C |
378 bcf PRODL,7 ; = 00RRRRR0 | 386 rlcf PRODH,F ; = URRRRR00 |
387 bcf STATUS,C | |
388 rlcf PRODH,F ; = RRRRR000 | |
389 btfsc PRODH,7 | |
390 bsf PRODH,2 | |
391 movff PRODH,win_color4 | |
379 bra aa_decode_3 ; Done. | 392 bra aa_decode_3 ; Done. |
380 | 393 |
381 ; ---- Simple BLACK and WHITE cases ------------------------------ | 394 ; ---- Simple BLACK and WHITE cases ------------------------------ |
382 aa_decode_13: ; Got a 1xx or a 000 code... | 395 aa_decode_13: ; Got a 1xx or a 000 code... |
383 btfsc win_invert,0 ; Inverse video mode ? | 396 btfsc win_invert,0 ; Inverse video mode ? |
385 bn aa_decode_2 ; Then test high bit. | 398 bn aa_decode_2 ; Then test high bit. |
386 | 399 |
387 ; WHITE pixel (ie. full color) | 400 ; WHITE pixel (ie. full color) |
388 movff win_color1,PRODH ; current draw color | 401 movff win_color1,PRODH ; current draw color |
389 movff win_color2,PRODL ; (rem: DISPLAY is big endian) | 402 movff win_color2,PRODL ; (rem: DISPLAY is big endian) |
390 setf win_color3 | 403 bra aa_decode_12b |
391 bra aa_decode_3 | |
392 | 404 |
393 aa_decode_2: | 405 aa_decode_2: |
394 clrf PRODH,A ; BLACK pixel | 406 clrf PRODH,A ; BLACK pixel |
395 clrf PRODL,A | 407 clrf PRODL,A |
396 clrf win_color3 | 408 clrf win_color4 |
409 clrf win_color5 | |
410 clrf win_color6 | |
397 | 411 |
398 aa_decode_3: | 412 aa_decode_3: |
399 ;---- PIXEL WRITE LOOP ----------------------------------------------- | 413 ;---- PIXEL WRITE LOOP ----------------------------------------------- |
400 AA_DATA_WRITE_PROD | 414 ; AA_DATA_WRITE_PROD |
415 bsf DISPLAY_rs ; Data! | |
416 | |
417 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
418 btfsc WREG,1 ; Display1? | |
419 bra aa_decode_3_display1 ; Yes. | |
420 | |
421 movff PRODH,PORTD ; Move high byte to PORTD (DISPLAY is bigendian) | |
422 bcf DISPLAY_rw | |
423 bsf DISPLAY_rw | |
424 movff PRODL,PORTD ; Move low byte to PORTD | |
425 bra aa_decode_3_done | |
426 | |
427 aa_decode_3_display1: | |
428 movff win_color4,PORTD ; Move high byte to PORTD (DISPLAY is bigendian) | |
429 bcf DISPLAY_rw | |
430 bsf DISPLAY_rw | |
431 movff win_color5,PORTD ; Move low byte to PORTD | |
432 bcf DISPLAY_rw | |
433 bsf DISPLAY_rw | |
434 movff win_color6,PORTD ; Move low(est) byte to PORTD | |
435 aa_decode_3_done: | |
436 bcf DISPLAY_rw | |
437 bsf DISPLAY_rw | |
438 | |
401 decf aa_bitlen,F,ACCESS | 439 decf aa_bitlen,F,ACCESS |
402 bnz aa_decode_3 | 440 bnz aa_decode_3 |
403 | 441 |
404 ;---- BYTE-CODE LOOP ------------------------------------------------- | 442 ;---- BYTE-CODE LOOP ------------------------------------------------- |
405 ; Are we done ? | 443 ; Are we done ? |