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 ?