Searching \ for '[SX] I'm drunk but I still got 4-bit GRAY SCALE B' in subject line. ()
Make payments with PayPal - it's fast, free and secure! Help us get a faster server
FAQ page: www.piclist.com/techref/ubicom/devices.htm?key=sx
Search entire site for: 'I'm drunk but I still got 4-bit GRAY SCALE B'.

Exact match. Not showing close matches.
PICList Thread
'[SX] I'm drunk but I still got 4-bit GRAY SCALE B'
2005\06\18@220205 by ForumAdmin

flavicon
face
In SX Microcontrollers, SX/B Compiler and SX-Key Tool, cbmeeks wrote:

hahaha..

yeah, I've been drinking. Man, I have to be the best drunkin EE amateur on the planet...LMAO.

For those that don't know...I've spent a lot of time in the XGamestation forums building different types of circuits for my homebrew computer.  Anyway, I built a video circuit a while back using a PIC16F88 so now, I have converted it to an SX28 running 50MIPS.  Anyway, I am displaying 16 shades of gray (including black,white and sync) on an NTSC monitor.

I built a 4-bit DAC using resistors (R2R network) and I now have 16 shades of gray! Well, actually, I have 13 shades of gray because Sync s 0, black is 1, and white is 15.

Anyway, it's beautiful...if I can get my freakin' camera to work, I will take some pics. :-D
Here is the source code....and yes, I stole Andre's DELAY macro but it's so damn good, why try and re-invent it?


;=======================================================================
;TITLE:         ntsc01
;
;PURPOSE:       Create purty pictures in assembly language
;
;AUTHOR:        cbmeeks
;
;CONNECTIONS:
;  RB.0 - RB.3 to R2R ladder
;
;DETAILS:
;=======================================================================

   ;-------------------------- DEVICE DIRECTIVES --------------------------
   DEVICE SX28,OSCHS2,TURBO
   FREQ 50_000_000
   IFDEF __SASM ;SASM Directives
   DEVICE STACKX,OPTIONX
   IRC_CAL IRC_SLOW
   ELSE ;Parallax Assember Directives
   DEVICE STACKX_OPTIONX
   ENDIF
   RESET Initialize
   ;------------------------------ VARIABLES ------------------------------
   SYNC equ %00000000
   BLACK equ %00000001
   WHITE equ %00001111
   GRAY2 equ 2
   GRAY3 equ 3
   GRAY4 equ 4
   GRAY5 equ 5
   GRAY6 equ 6
   GRAY7 equ 7
   GRAY8 equ 8
   GRAY9 equ 9
   GRAY10 equ 10
   GRAY11 equ 11
   GRAY12 equ 12
   GRAY13 equ 13
   GRAY14 equ 14
   CLK_SCALE equ 5 ; used to make calling the DELAY macro easier
   ; set this to the frequency / 10,000,000
   counter DS 1 ; general counter
   counter2 DS 1 ; general counter

   ; **** MACROS *****************************************************************
   ; /////////////////////////////////////////////////////////////////////////////
   DELAY MACRO clocks
   ; Thanks to Andre' Lamoth for this delay routine
   ; this macro can handle large delays up to 25,500 cycles, so to call it use the following
   ; constructions
   ; cycle delay
   ; DELAY(number_of_clocks)
   ; for 80 mhz clock, microsecond parameters
   ; DELAY(80*microseconds)
   ; example you want a 4.5 uS delay
   ; 80*4.5 = 360
   ; DELAY(360)
   ; the preprocessor can NOT do floating point math, so another construction would be to scale
   ; all values by 10 then multiply by 8 rather than 80, for example, a 4.5 uS delay could be
   ; written
   ; DELAY(8*45)
   ; which is a little more intuitive
   ; first compute fractional remainder of 10 and delay
   IF (((clocks) // 10) > 0)
   ; first 3 clock chunks
   REPT (((clocks) // 10)/3)
   JMP $ + 1
   ENDR
   ; now the remainder if any
   REPT (((clocks) // 10)//3)
   NOP
   ENDR
   ENDIF
   ; next multiples of 100
   IF (((clocks) / 100) >= 1)
   ; delay 100*(clocks/100), loop equals 100, therefore 1*(clocks/100) iterations
   mov counter, #((clocks)/100) ; (2)
   :Loop
   mov counter2, #24 ; (2)
   :Loop100
   djnz counter2, :Loop100 ; (4/2)
   djnz counter, :Loop ; (4/2)
   ENDIF

   ; last compute whole multiples of 10, and delay
   IF (( ((clocks) // 100) / 10) >= 1)
   ; delay 10*(clocks/10), loop equals 10, therefore (clocks/10) iterations
   mov counter, #( ((clocks) // 100) / 10) ; (2)
   :Loop2
   jmp $ + 1 ; (3)
   jmp $ + 1 ; (3)
   djnz counter, :Loop2 ; (4/2)
   ENDIF
   ENDM

   ;------------------------ INITIALIZATION ROUTINE -----------------------
   Initialize
   ;Configure port settings
   mov rb, #%00000000 ;Port A output zero
   mov !rb,#%00000000 ;Port A all output
   ;---------------------------- MAIN PROGRAM -----------------------------
   Main
   ; front porch 1.5us
   mov rb, #BLACK ;2 cycles - black
   DELAY (CLK_SCALE*15-2)
   ; hsync 4.7us
   mov rb, #SYNC ;2 cycles - sync
   DELAY (CLK_SCALE*47 - 2)
   ;delay for old TV's 3.8us
   mov rb, #BLACK ; 2 cycles - black
   DELAY (CLK_SCALE*38 - 2)
   ;begin scanline 10us

   mov rb, #WHITE
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY14
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY13
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY12
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY11
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY10
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY9
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY8
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY7
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY6
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY5
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY4
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY3
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #GRAY2
   DELAY (CLK_SCALE*30 - 2) ;3us
   mov rb, #BLACK
   DELAY (CLK_SCALE*115 - 2) ;11.5us

   jmp Main ;goto main

Hope this helps someone. :-)
WOOOHOOO!!!!

cbmeeks
---------- End of Message ----------

You can view the post on-line at:
http://forums.parallax.com/forums/default.aspx?f=7&p=1&m=77766
Need assistance? Send an email to the Forum Administrator at forumadmin@parallax.com
The Parallax Forums are powered by dotNetBB Forums, copyright 2002-2005 (http://www.dotNetBB.com)

More... (looser matching)
- Last day of these posts
- In 2005 , 2006 only
- Today
- New search...